lakutata 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.idea/codeStyles/Project.xml +18 -0
- package/.idea/codeStyles/codeStyleConfig.xml +5 -0
- package/.idea/inspectionProfiles/Project_Default.xml +6 -0
- package/.idea/lakutata.iml +13 -0
- package/.idea/modules.xml +8 -0
- package/.idea/vcs.xml +6 -0
- package/LICENSE +21 -0
- package/README.md +1 -0
- package/build/Application-78a416de.d.ts +387 -0
- package/build/Application-b5e19e08.d.ts +387 -0
- package/build/Components.cjs +55 -0
- package/build/Components.d.cts +9 -0
- package/build/Components.d.ts +9 -0
- package/build/Components.js +44 -0
- package/build/Core.cjs +148 -0
- package/build/Core.d.cts +33 -0
- package/build/Core.d.ts +33 -0
- package/build/Core.js +71 -0
- package/build/Crypto.cjs +96 -0
- package/build/Crypto.d.cts +19 -0
- package/build/Crypto.d.ts +19 -0
- package/build/Crypto.js +41 -0
- package/build/Decorators.cjs +100 -0
- package/build/Decorators.d.cts +23 -0
- package/build/Decorators.d.ts +23 -0
- package/build/Decorators.js +45 -0
- package/build/DependencyInjectionContainer-871a6c03.d.ts +340 -0
- package/build/DependencyInjectionContainer-f037ac36.d.ts +340 -0
- package/build/Exceptions.cjs +144 -0
- package/build/Exceptions.d.cts +28 -0
- package/build/Exceptions.d.ts +28 -0
- package/build/Exceptions.js +37 -0
- package/build/Hash.cjs +223 -0
- package/build/Hash.d.cts +535 -0
- package/build/Hash.d.ts +535 -0
- package/build/Hash.js +10 -0
- package/build/Time.cjs +14 -0
- package/build/Time.d.cts +5 -0
- package/build/Time.d.ts +5 -0
- package/build/Time.js +5 -0
- package/build/TimeInput-24fced42.d.ts +243 -0
- package/build/TimeInput-4401fc58.d.ts +243 -0
- package/build/Utilities.cjs +100 -0
- package/build/Utilities.d.cts +212 -0
- package/build/Utilities.d.ts +212 -0
- package/build/Utilities.js +7 -0
- package/build/Validator.cjs +24 -0
- package/build/Validator.d.cts +1851 -0
- package/build/Validator.d.ts +1851 -0
- package/build/Validator.js +11 -0
- package/build/chunk-26TQI22I.js +196 -0
- package/build/chunk-27OFA7C3.js +16 -0
- package/build/chunk-2C2UILFN.js +23 -0
- package/build/chunk-2CHYQHWR.cjs +16 -0
- package/build/chunk-2DN35UQB.cjs +10947 -0
- package/build/chunk-2E4TF6LU.cjs +16 -0
- package/build/chunk-2PLJEW2R.js +14 -0
- package/build/chunk-2RW3VMNS.js +45 -0
- package/build/chunk-2T6JU2UH.js +14 -0
- package/build/chunk-3CX3GCQF.js +32 -0
- package/build/chunk-3JIQCDQG.cjs +25 -0
- package/build/chunk-3KLEN3PR.js +14 -0
- package/build/chunk-3LZRQPJ5.js +14 -0
- package/build/chunk-3NHHHZFR.cjs +870 -0
- package/build/chunk-4332C5BW.js +30 -0
- package/build/chunk-46V7GHKE.cjs +25 -0
- package/build/chunk-4EPPSZ7L.js +14 -0
- package/build/chunk-4FEEQIQ4.js +23 -0
- package/build/chunk-4G2ZCUBN.js +5570 -0
- package/build/chunk-4KTVY73U.js +15 -0
- package/build/chunk-4MQXSUTL.cjs +14 -0
- package/build/chunk-4OHSPWRQ.js +34 -0
- package/build/chunk-4PK4TGU4.cjs +16 -0
- package/build/chunk-4YXUEJSO.js +23 -0
- package/build/chunk-5475IFR4.cjs +16 -0
- package/build/chunk-5B5Z4GCR.cjs +17 -0
- package/build/chunk-5FPTDIKI.cjs +16 -0
- package/build/chunk-5NK7E2HA.js +69 -0
- package/build/chunk-67F5WP5Z.cjs +8 -0
- package/build/chunk-6BJTKEXZ.cjs +25 -0
- package/build/chunk-6WNLPTDY.cjs +8 -0
- package/build/chunk-7G7FCNEG.cjs +8 -0
- package/build/chunk-7IVNTVYK.cjs +16 -0
- package/build/chunk-7MJAWOWL.js +22896 -0
- package/build/chunk-7MTOK62N.js +767 -0
- package/build/chunk-7PADGZPI.cjs +129 -0
- package/build/chunk-7ZUM53G6.js +14 -0
- package/build/chunk-A4BYNKYF.js +42 -0
- package/build/chunk-A7F6LCRA.cjs +16 -0
- package/build/chunk-AFV3VN3X.cjs +8 -0
- package/build/chunk-AGHMOCC3.cjs +16 -0
- package/build/chunk-AHUH4FWQ.cjs +29 -0
- package/build/chunk-AM4YMG2S.js +6 -0
- package/build/chunk-ANDEVIKJ.cjs +16 -0
- package/build/chunk-APETX7ZT.cjs +16 -0
- package/build/chunk-ASMC7EUP.js +6 -0
- package/build/chunk-BDCRHGKN.js +6 -0
- package/build/chunk-BDJXMO44.js +2920 -0
- package/build/chunk-BE7ICF5R.js +32 -0
- package/build/chunk-BEDKPRVX.cjs +17 -0
- package/build/chunk-BFE66ADZ.cjs +34 -0
- package/build/chunk-BKCT2HSQ.js +178 -0
- package/build/chunk-BMNC4W46.js +20 -0
- package/build/chunk-BO7Y6HNS.cjs +176 -0
- package/build/chunk-D4H35ART.cjs +53 -0
- package/build/chunk-D5DE7Z4J.js +29 -0
- package/build/chunk-DHSSJJMD.cjs +25 -0
- package/build/chunk-DIMOR6NE.cjs +8 -0
- package/build/chunk-DN5TSX6S.cjs +244 -0
- package/build/chunk-EEH5LCBP.cjs +16 -0
- package/build/chunk-EFYDUUXT.cjs +92 -0
- package/build/chunk-ENJSEFE4.js +14 -0
- package/build/chunk-EPYJVQHQ.js +6 -0
- package/build/chunk-EUVLTNDV.js +32 -0
- package/build/chunk-EXQVCESB.cjs +20 -0
- package/build/chunk-EYPPC6HP.js +18 -0
- package/build/chunk-F5NKGQDL.cjs +16 -0
- package/build/chunk-F7RNH2H2.js +266 -0
- package/build/chunk-FCTV4OB7.cjs +50 -0
- package/build/chunk-FHEXUE67.js +29 -0
- package/build/chunk-FJP3KNXK.js +23 -0
- package/build/chunk-FJQSLRIP.js +14 -0
- package/build/chunk-FSFWPTIC.js +6 -0
- package/build/chunk-FTKFMQHJ.cjs +16 -0
- package/build/chunk-FW26MPE4.js +69 -0
- package/build/chunk-FZNRGZGE.js +6372 -0
- package/build/chunk-G7EDOLQ7.cjs +100 -0
- package/build/chunk-GGY7LCMQ.cjs +73 -0
- package/build/chunk-GLWUJIMW.cjs +8 -0
- package/build/chunk-GZ5KN2PE.js +6 -0
- package/build/chunk-HBPRX3WA.cjs +202 -0
- package/build/chunk-HJAQ6WJM.cjs +288 -0
- package/build/chunk-HJSJA5CF.js +14 -0
- package/build/chunk-HKAY7FWM.js +28 -0
- package/build/chunk-HMKTNRQF.js +14 -0
- package/build/chunk-HODDA5D5.js +199 -0
- package/build/chunk-HPKJUFTM.js +14 -0
- package/build/chunk-HWCTWIVZ.cjs +30 -0
- package/build/chunk-HXWC4YN6.cjs +22908 -0
- package/build/chunk-HZJ7XFHQ.cjs +8 -0
- package/build/chunk-I5TGKTX6.js +18 -0
- package/build/chunk-I7J6V3EU.cjs +34 -0
- package/build/chunk-IKWXYUGY.js +14 -0
- package/build/chunk-IYGGR65W.cjs +16 -0
- package/build/chunk-J6RXNX2K.js +174 -0
- package/build/chunk-JAEEMFEZ.cjs +24 -0
- package/build/chunk-JFOMNL5I.cjs +22 -0
- package/build/chunk-JPV2PUHF.cjs +8 -0
- package/build/chunk-JR726PDZ.cjs +70 -0
- package/build/chunk-JTKOYDJB.js +5914 -0
- package/build/chunk-JU53NOVA.cjs +31 -0
- package/build/chunk-JVSBYHUY.js +10944 -0
- package/build/chunk-JYBISTRN.cjs +25 -0
- package/build/chunk-K2ALA7QI.js +12 -0
- package/build/chunk-KG6DPM4B.js +14 -0
- package/build/chunk-KNSBLLL2.cjs +32 -0
- package/build/chunk-KNTGBUSY.js +6 -0
- package/build/chunk-KWOHVRRL.js +6 -0
- package/build/chunk-L3IVYIVA.js +23 -0
- package/build/chunk-LBL5XNWX.js +221 -0
- package/build/chunk-LBOBUFWZ.js +6 -0
- package/build/chunk-LEJXJUBE.js +6 -0
- package/build/chunk-LJTCXKC4.js +242 -0
- package/build/chunk-MBKTJ3KM.cjs +118 -0
- package/build/chunk-MDE5SRLT.cjs +16 -0
- package/build/chunk-MEKICSEL.js +22 -0
- package/build/chunk-MNDBRDT2.cjs +608 -0
- package/build/chunk-MSWZLYS7.cjs +5916 -0
- package/build/chunk-MT2OB376.js +14 -0
- package/build/chunk-MVWB4XDJ.js +14 -0
- package/build/chunk-MXAAAL2S.js +53 -0
- package/build/chunk-N37KV2VV.cjs +199 -0
- package/build/chunk-NZ5IZMM5.cjs +2922 -0
- package/build/chunk-O2NOYN65.js +54 -0
- package/build/chunk-OAD22QZQ.js +6 -0
- package/build/chunk-OIFILR4I.js +125 -0
- package/build/chunk-OJGBPS2B.cjs +16 -0
- package/build/chunk-OMPATIMZ.cjs +71 -0
- package/build/chunk-P3Z7ZEGJ.cjs +18 -0
- package/build/chunk-P6BBXCBD.cjs +6425 -0
- package/build/chunk-PE4C2TIO.cjs +16 -0
- package/build/chunk-PF2WAZLH.cjs +52 -0
- package/build/chunk-PFFTGOAR.cjs +25 -0
- package/build/chunk-PFUZLHWJ.cjs +25 -0
- package/build/chunk-POE7A7NF.cjs +180 -0
- package/build/chunk-PQSDA5BN.js +50 -0
- package/build/chunk-PR5TPAGH.js +14 -0
- package/build/chunk-PXMWVOKK.cjs +16 -0
- package/build/chunk-PZ5OJC4I.cjs +16 -0
- package/build/chunk-Q4LNTPEI.cjs +34 -0
- package/build/chunk-QCA5YGYV.js +14 -0
- package/build/chunk-QGGML4PP.js +17 -0
- package/build/chunk-QHW273SN.js +32 -0
- package/build/chunk-QJJRQMA6.cjs +8 -0
- package/build/chunk-QKB76MIV.cjs +769 -0
- package/build/chunk-QKVPGRI5.cjs +8 -0
- package/build/chunk-QME47CJL.cjs +8 -0
- package/build/chunk-QNJ6XBYQ.js +14 -0
- package/build/chunk-QWYKUNU5.js +14 -0
- package/build/chunk-QXTBP6TW.js +116 -0
- package/build/chunk-RH3LAIQS.js +32 -0
- package/build/chunk-RMAXG5F7.js +118 -0
- package/build/chunk-RUHAPGDE.js +14 -0
- package/build/chunk-S4KA3ZGO.js +6 -0
- package/build/chunk-SAGMV3YX.cjs +16 -0
- package/build/chunk-SCWEQ5JA.cjs +34 -0
- package/build/chunk-SEKBDIJH.cjs +16 -0
- package/build/chunk-SGWWTKLW.cjs +16 -0
- package/build/chunk-SWCU6OID.cjs +61 -0
- package/build/chunk-T4C7UJEZ.js +29 -0
- package/build/chunk-TBWIKIS3.cjs +8 -0
- package/build/chunk-TS74DN3N.cjs +229 -0
- package/build/chunk-TXTNUC7S.cjs +16 -0
- package/build/chunk-UEGDBJEG.cjs +127 -0
- package/build/chunk-UR2ZK7MI.cjs +16 -0
- package/build/chunk-VAOR6JOP.js +14 -0
- package/build/chunk-VELZ3KJY.cjs +45 -0
- package/build/chunk-VHTAHAD6.cjs +34 -0
- package/build/chunk-VISA22LF.js +14 -0
- package/build/chunk-VOFRWVGM.js +23 -0
- package/build/chunk-VPRNM6FU.cjs +118 -0
- package/build/chunk-VTFNEUOF.js +14 -0
- package/build/chunk-VVNU27G2.js +868 -0
- package/build/chunk-W3TQER3B.cjs +31 -0
- package/build/chunk-WINISBV4.js +70 -0
- package/build/chunk-WSEZ7DZV.js +14 -0
- package/build/chunk-WW57G6RG.js +124 -0
- package/build/chunk-WYJCE3KY.cjs +5593 -0
- package/build/chunk-WZI5UPER.cjs +61 -0
- package/build/chunk-WZZF2IEV.js +14 -0
- package/build/chunk-X4AIZSIY.cjs +47 -0
- package/build/chunk-XO6M5AYN.js +585 -0
- package/build/chunk-XWP76C6E.js +25 -0
- package/build/chunk-Y7O5SCF6.cjs +16 -0
- package/build/chunk-YEBPQG7X.js +96 -0
- package/build/chunk-YT4CYDJ3.js +14 -0
- package/build/chunk-ZG3PHRVQ.cjs +20 -0
- package/build/chunk-ZG7QF5S2.cjs +16 -0
- package/build/chunk-ZJYLWSBE.js +90 -0
- package/build/chunk-ZYBMNLGI.js +48 -0
- package/build/constants/DefaultValue.cjs +14 -0
- package/build/constants/DefaultValue.d.cts +9 -0
- package/build/constants/DefaultValue.d.ts +9 -0
- package/build/constants/DefaultValue.js +5 -0
- package/build/constants/MetadataKey.cjs +114 -0
- package/build/constants/MetadataKey.d.cts +30 -0
- package/build/constants/MetadataKey.d.ts +30 -0
- package/build/constants/MetadataKey.js +5 -0
- package/build/decorators/ControllerDecorators.cjs +21 -0
- package/build/decorators/ControllerDecorators.d.cts +32 -0
- package/build/decorators/ControllerDecorators.d.ts +32 -0
- package/build/decorators/ControllerDecorators.js +12 -0
- package/build/decorators/DependencyInjectionDecorators.cjs +78 -0
- package/build/decorators/DependencyInjectionDecorators.d.cts +75 -0
- package/build/decorators/DependencyInjectionDecorators.d.ts +75 -0
- package/build/decorators/DependencyInjectionDecorators.js +41 -0
- package/build/decorators/ValidationDecorators.cjs +35 -0
- package/build/decorators/ValidationDecorators.d.cts +36 -0
- package/build/decorators/ValidationDecorators.d.ts +36 -0
- package/build/decorators/ValidationDecorators.js +14 -0
- package/build/exceptions/DependencyInjectionException.cjs +18 -0
- package/build/exceptions/DependencyInjectionException.d.cts +8 -0
- package/build/exceptions/DependencyInjectionException.d.ts +8 -0
- package/build/exceptions/DependencyInjectionException.js +9 -0
- package/build/exceptions/InvalidConfigurableValueException.cjs +18 -0
- package/build/exceptions/InvalidConfigurableValueException.d.cts +8 -0
- package/build/exceptions/InvalidConfigurableValueException.d.ts +8 -0
- package/build/exceptions/InvalidConfigurableValueException.js +9 -0
- package/build/exceptions/InvalidDTOValueException.cjs +18 -0
- package/build/exceptions/InvalidDTOValueException.d.cts +8 -0
- package/build/exceptions/InvalidDTOValueException.d.ts +8 -0
- package/build/exceptions/InvalidDTOValueException.js +9 -0
- package/build/exceptions/InvalidGlobStringException.cjs +18 -0
- package/build/exceptions/InvalidGlobStringException.d.cts +8 -0
- package/build/exceptions/InvalidGlobStringException.d.ts +8 -0
- package/build/exceptions/InvalidGlobStringException.js +9 -0
- package/build/exceptions/MethodNotFoundException.cjs +18 -0
- package/build/exceptions/MethodNotFoundException.d.cts +8 -0
- package/build/exceptions/MethodNotFoundException.d.ts +8 -0
- package/build/exceptions/MethodNotFoundException.js +9 -0
- package/build/exceptions/NotSupportHashException.cjs +18 -0
- package/build/exceptions/NotSupportHashException.d.cts +8 -0
- package/build/exceptions/NotSupportHashException.d.ts +8 -0
- package/build/exceptions/NotSupportHashException.js +9 -0
- package/build/exceptions/controller/DuplicateControllerActionPatternException.cjs +18 -0
- package/build/exceptions/controller/DuplicateControllerActionPatternException.d.cts +8 -0
- package/build/exceptions/controller/DuplicateControllerActionPatternException.d.ts +8 -0
- package/build/exceptions/controller/DuplicateControllerActionPatternException.js +9 -0
- package/build/exceptions/controller/DynamicRegisterControllerNotAllowException.cjs +18 -0
- package/build/exceptions/controller/DynamicRegisterControllerNotAllowException.d.cts +8 -0
- package/build/exceptions/controller/DynamicRegisterControllerNotAllowException.d.ts +8 -0
- package/build/exceptions/controller/DynamicRegisterControllerNotAllowException.js +9 -0
- package/build/exceptions/controller/NoMatchedControllerActionPatternException.cjs +18 -0
- package/build/exceptions/controller/NoMatchedControllerActionPatternException.d.cts +8 -0
- package/build/exceptions/controller/NoMatchedControllerActionPatternException.d.ts +8 -0
- package/build/exceptions/controller/NoMatchedControllerActionPatternException.js +9 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricDecryptException.cjs +18 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricDecryptException.d.cts +8 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricDecryptException.d.ts +8 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricDecryptException.js +9 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricEncryptException.cjs +18 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricEncryptException.d.cts +8 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricEncryptException.d.ts +8 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricEncryptException.js +9 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricSignException.cjs +18 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricSignException.d.cts +8 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricSignException.d.ts +8 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricSignException.js +9 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricVerifyException.cjs +18 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricVerifyException.d.cts +8 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricVerifyException.d.ts +8 -0
- package/build/exceptions/crypto/asymmetric/AsymmetricVerifyException.js +9 -0
- package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptKeyPairException.cjs +18 -0
- package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptKeyPairException.d.cts +8 -0
- package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptKeyPairException.d.ts +8 -0
- package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptKeyPairException.js +9 -0
- package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptPrivateKeyException.cjs +18 -0
- package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptPrivateKeyException.d.cts +8 -0
- package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptPrivateKeyException.d.ts +8 -0
- package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptPrivateKeyException.js +9 -0
- package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptPublicKeyException.cjs +18 -0
- package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptPublicKeyException.d.cts +8 -0
- package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptPublicKeyException.d.ts +8 -0
- package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptPublicKeyException.js +9 -0
- package/build/exceptions/crypto/asymmetric/NoAsymmetricEncryptPrivateKeyException.cjs +18 -0
- package/build/exceptions/crypto/asymmetric/NoAsymmetricEncryptPrivateKeyException.d.cts +8 -0
- package/build/exceptions/crypto/asymmetric/NoAsymmetricEncryptPrivateKeyException.d.ts +8 -0
- package/build/exceptions/crypto/asymmetric/NoAsymmetricEncryptPrivateKeyException.js +9 -0
- package/build/exceptions/crypto/asymmetric/NoAsymmetricEncryptPublicKeyException.cjs +18 -0
- package/build/exceptions/crypto/asymmetric/NoAsymmetricEncryptPublicKeyException.d.cts +8 -0
- package/build/exceptions/crypto/asymmetric/NoAsymmetricEncryptPublicKeyException.d.ts +8 -0
- package/build/exceptions/crypto/asymmetric/NoAsymmetricEncryptPublicKeyException.js +9 -0
- package/build/exceptions/crypto/symmetric/InvalidSymmetricCipherIVLengthException.cjs +18 -0
- package/build/exceptions/crypto/symmetric/InvalidSymmetricCipherIVLengthException.d.cts +8 -0
- package/build/exceptions/crypto/symmetric/InvalidSymmetricCipherIVLengthException.d.ts +8 -0
- package/build/exceptions/crypto/symmetric/InvalidSymmetricCipherIVLengthException.js +9 -0
- package/build/exceptions/crypto/symmetric/InvalidSymmetricCipherKeyLengthException.cjs +18 -0
- package/build/exceptions/crypto/symmetric/InvalidSymmetricCipherKeyLengthException.d.cts +8 -0
- package/build/exceptions/crypto/symmetric/InvalidSymmetricCipherKeyLengthException.d.ts +8 -0
- package/build/exceptions/crypto/symmetric/InvalidSymmetricCipherKeyLengthException.js +9 -0
- package/build/exceptions/crypto/symmetric/NotSupportCipherException.cjs +18 -0
- package/build/exceptions/crypto/symmetric/NotSupportCipherException.d.cts +8 -0
- package/build/exceptions/crypto/symmetric/NotSupportCipherException.d.ts +8 -0
- package/build/exceptions/crypto/symmetric/NotSupportCipherException.js +9 -0
- package/build/exceptions/crypto/symmetric/SymmetricDecryptException.cjs +18 -0
- package/build/exceptions/crypto/symmetric/SymmetricDecryptException.d.cts +8 -0
- package/build/exceptions/crypto/symmetric/SymmetricDecryptException.d.ts +8 -0
- package/build/exceptions/crypto/symmetric/SymmetricDecryptException.js +9 -0
- package/build/exceptions/crypto/symmetric/SymmetricEncryptException.cjs +18 -0
- package/build/exceptions/crypto/symmetric/SymmetricEncryptException.d.cts +8 -0
- package/build/exceptions/crypto/symmetric/SymmetricEncryptException.d.ts +8 -0
- package/build/exceptions/crypto/symmetric/SymmetricEncryptException.js +9 -0
- package/build/exceptions/validation/InvalidMethodAcceptException.cjs +18 -0
- package/build/exceptions/validation/InvalidMethodAcceptException.d.cts +8 -0
- package/build/exceptions/validation/InvalidMethodAcceptException.d.ts +8 -0
- package/build/exceptions/validation/InvalidMethodAcceptException.js +9 -0
- package/build/exceptions/validation/InvalidMethodReturnException.cjs +18 -0
- package/build/exceptions/validation/InvalidMethodReturnException.d.cts +8 -0
- package/build/exceptions/validation/InvalidMethodReturnException.d.ts +8 -0
- package/build/exceptions/validation/InvalidMethodReturnException.js +9 -0
- package/build/exceptions/validation/InvalidValueException.cjs +18 -0
- package/build/exceptions/validation/InvalidValueException.d.cts +8 -0
- package/build/exceptions/validation/InvalidValueException.d.ts +8 -0
- package/build/exceptions/validation/InvalidValueException.js +9 -0
- package/build/index.d-e5279fea.d.ts +872 -0
- package/build/interfaces/IConstructor.cjs +7 -0
- package/build/interfaces/IConstructor.d.cts +6 -0
- package/build/interfaces/IConstructor.d.ts +6 -0
- package/build/interfaces/IConstructor.js +4 -0
- package/build/interfaces/ILogger.cjs +7 -0
- package/build/interfaces/ILogger.d.cts +22 -0
- package/build/interfaces/ILogger.d.ts +22 -0
- package/build/interfaces/ILogger.js +4 -0
- package/build/interfaces/IPatRun.cjs +7 -0
- package/build/interfaces/IPatRun.d.cts +12 -0
- package/build/interfaces/IPatRun.d.ts +12 -0
- package/build/interfaces/IPatRun.js +4 -0
- package/build/interfaces/ISortArrayOptions.cjs +7 -0
- package/build/interfaces/ISortArrayOptions.d.cts +12 -0
- package/build/interfaces/ISortArrayOptions.d.ts +12 -0
- package/build/interfaces/ISortArrayOptions.js +4 -0
- package/build/interfaces/ISortObjectOptions.cjs +7 -0
- package/build/interfaces/ISortObjectOptions.d.cts +6 -0
- package/build/interfaces/ISortObjectOptions.d.ts +6 -0
- package/build/interfaces/ISortObjectOptions.js +4 -0
- package/build/lib/Application.cjs +50 -0
- package/build/lib/Application.d.cts +20 -0
- package/build/lib/Application.d.ts +20 -0
- package/build/lib/Application.js +41 -0
- package/build/lib/base/BaseObject.cjs +50 -0
- package/build/lib/base/BaseObject.d.cts +112 -0
- package/build/lib/base/BaseObject.d.ts +112 -0
- package/build/lib/base/BaseObject.js +41 -0
- package/build/lib/base/Component.cjs +50 -0
- package/build/lib/base/Component.d.cts +116 -0
- package/build/lib/base/Component.d.ts +116 -0
- package/build/lib/base/Component.js +41 -0
- package/build/lib/base/Container.cjs +50 -0
- package/build/lib/base/Container.d.cts +20 -0
- package/build/lib/base/Container.d.ts +20 -0
- package/build/lib/base/Container.js +41 -0
- package/build/lib/base/Controller.cjs +50 -0
- package/build/lib/base/Controller.d.cts +20 -0
- package/build/lib/base/Controller.d.ts +20 -0
- package/build/lib/base/Controller.js +41 -0
- package/build/lib/base/DTO.cjs +23 -0
- package/build/lib/base/DTO.d.cts +59 -0
- package/build/lib/base/DTO.d.ts +59 -0
- package/build/lib/base/DTO.js +14 -0
- package/build/lib/base/Model.cjs +51 -0
- package/build/lib/base/Model.d.cts +30 -0
- package/build/lib/base/Model.d.ts +30 -0
- package/build/lib/base/Model.js +42 -0
- package/build/lib/base/Module.cjs +50 -0
- package/build/lib/base/Module.d.cts +20 -0
- package/build/lib/base/Module.d.ts +20 -0
- package/build/lib/base/Module.js +41 -0
- package/build/lib/base/abstracts/AsymmetricEncryption.cjs +27 -0
- package/build/lib/base/abstracts/AsymmetricEncryption.d.cts +172 -0
- package/build/lib/base/abstracts/AsymmetricEncryption.d.ts +172 -0
- package/build/lib/base/abstracts/AsymmetricEncryption.js +18 -0
- package/build/lib/base/abstracts/Exception.cjs +17 -0
- package/build/lib/base/abstracts/Exception.d.cts +23 -0
- package/build/lib/base/abstracts/Exception.d.ts +23 -0
- package/build/lib/base/abstracts/Exception.js +8 -0
- package/build/lib/base/abstracts/Interval.cjs +51 -0
- package/build/lib/base/abstracts/Interval.d.cts +76 -0
- package/build/lib/base/abstracts/Interval.d.ts +76 -0
- package/build/lib/base/abstracts/Interval.js +42 -0
- package/build/lib/base/abstracts/SymmetricEncryption.cjs +23 -0
- package/build/lib/base/abstracts/SymmetricEncryption.d.cts +149 -0
- package/build/lib/base/abstracts/SymmetricEncryption.d.ts +149 -0
- package/build/lib/base/abstracts/SymmetricEncryption.js +14 -0
- package/build/lib/base/async-constructor/Append.cjs +14 -0
- package/build/lib/base/async-constructor/Append.d.cts +5 -0
- package/build/lib/base/async-constructor/Append.d.ts +5 -0
- package/build/lib/base/async-constructor/Append.js +5 -0
- package/build/lib/base/async-constructor/AsyncConstructor.cjs +15 -0
- package/build/lib/base/async-constructor/AsyncConstructor.d.cts +7 -0
- package/build/lib/base/async-constructor/AsyncConstructor.d.ts +7 -0
- package/build/lib/base/async-constructor/AsyncConstructor.js +6 -0
- package/build/lib/components/Formatter.cjs +50 -0
- package/build/lib/components/Formatter.d.cts +203 -0
- package/build/lib/components/Formatter.d.ts +203 -0
- package/build/lib/components/Formatter.js +41 -0
- package/build/lib/components/Logger.cjs +50 -0
- package/build/lib/components/Logger.d.cts +61 -0
- package/build/lib/components/Logger.d.ts +61 -0
- package/build/lib/components/Logger.js +41 -0
- package/build/lib/crypto/RSA.cjs +28 -0
- package/build/lib/crypto/RSA.d.cts +61 -0
- package/build/lib/crypto/RSA.d.ts +61 -0
- package/build/lib/crypto/RSA.js +19 -0
- package/build/lib/crypto/SM2.cjs +28 -0
- package/build/lib/crypto/SM2.d.cts +47 -0
- package/build/lib/crypto/SM2.d.ts +47 -0
- package/build/lib/crypto/SM2.js +19 -0
- package/build/lib/crypto/aes/AES128.cjs +25 -0
- package/build/lib/crypto/aes/AES128.d.cts +14 -0
- package/build/lib/crypto/aes/AES128.d.ts +14 -0
- package/build/lib/crypto/aes/AES128.js +16 -0
- package/build/lib/crypto/aes/AES192.cjs +25 -0
- package/build/lib/crypto/aes/AES192.d.cts +14 -0
- package/build/lib/crypto/aes/AES192.d.ts +14 -0
- package/build/lib/crypto/aes/AES192.js +16 -0
- package/build/lib/crypto/aes/AES256.cjs +25 -0
- package/build/lib/crypto/aes/AES256.d.cts +14 -0
- package/build/lib/crypto/aes/AES256.d.ts +14 -0
- package/build/lib/crypto/aes/AES256.js +16 -0
- package/build/lib/crypto/aria/ARIA128.cjs +24 -0
- package/build/lib/crypto/aria/ARIA128.d.cts +13 -0
- package/build/lib/crypto/aria/ARIA128.d.ts +13 -0
- package/build/lib/crypto/aria/ARIA128.js +15 -0
- package/build/lib/crypto/aria/ARIA192.cjs +24 -0
- package/build/lib/crypto/aria/ARIA192.d.cts +13 -0
- package/build/lib/crypto/aria/ARIA192.d.ts +13 -0
- package/build/lib/crypto/aria/ARIA192.js +15 -0
- package/build/lib/crypto/aria/ARIA256.cjs +24 -0
- package/build/lib/crypto/aria/ARIA256.d.cts +13 -0
- package/build/lib/crypto/aria/ARIA256.d.ts +13 -0
- package/build/lib/crypto/aria/ARIA256.js +15 -0
- package/build/lib/crypto/camellia/CAMELLIA128.cjs +24 -0
- package/build/lib/crypto/camellia/CAMELLIA128.d.cts +13 -0
- package/build/lib/crypto/camellia/CAMELLIA128.d.ts +13 -0
- package/build/lib/crypto/camellia/CAMELLIA128.js +15 -0
- package/build/lib/crypto/camellia/CAMELLIA192.cjs +24 -0
- package/build/lib/crypto/camellia/CAMELLIA192.d.cts +13 -0
- package/build/lib/crypto/camellia/CAMELLIA192.d.ts +13 -0
- package/build/lib/crypto/camellia/CAMELLIA192.js +15 -0
- package/build/lib/crypto/camellia/CAMELLIA256.cjs +24 -0
- package/build/lib/crypto/camellia/CAMELLIA256.d.cts +13 -0
- package/build/lib/crypto/camellia/CAMELLIA256.d.ts +13 -0
- package/build/lib/crypto/camellia/CAMELLIA256.js +15 -0
- package/build/lib/crypto/des/DES.cjs +25 -0
- package/build/lib/crypto/des/DES.d.cts +14 -0
- package/build/lib/crypto/des/DES.d.ts +14 -0
- package/build/lib/crypto/des/DES.js +16 -0
- package/build/lib/crypto/des/TripleDES.cjs +25 -0
- package/build/lib/crypto/des/TripleDES.d.cts +14 -0
- package/build/lib/crypto/des/TripleDES.d.ts +14 -0
- package/build/lib/crypto/des/TripleDES.js +16 -0
- package/build/lib/ioc/DependencyInjectionContainer.cjs +29 -0
- package/build/lib/ioc/DependencyInjectionContainer.d.cts +4 -0
- package/build/lib/ioc/DependencyInjectionContainer.d.ts +4 -0
- package/build/lib/ioc/DependencyInjectionContainer.js +20 -0
- package/build/lib/ioc/Errors.cjs +27 -0
- package/build/lib/ioc/Errors.d.cts +53 -0
- package/build/lib/ioc/Errors.d.ts +53 -0
- package/build/lib/ioc/Errors.js +10 -0
- package/build/lib/ioc/FunctionTokenizer.cjs +18 -0
- package/build/lib/ioc/FunctionTokenizer.d.cts +33 -0
- package/build/lib/ioc/FunctionTokenizer.d.ts +33 -0
- package/build/lib/ioc/FunctionTokenizer.js +5 -0
- package/build/lib/ioc/InjectionMode.cjs +14 -0
- package/build/lib/ioc/InjectionMode.d.cts +12 -0
- package/build/lib/ioc/InjectionMode.d.ts +12 -0
- package/build/lib/ioc/InjectionMode.js +5 -0
- package/build/lib/ioc/Lifetime.cjs +14 -0
- package/build/lib/ioc/Lifetime.d.cts +12 -0
- package/build/lib/ioc/Lifetime.d.ts +12 -0
- package/build/lib/ioc/Lifetime.js +5 -0
- package/build/lib/ioc/ListModules.cjs +17 -0
- package/build/lib/ioc/ListModules.d.cts +4 -0
- package/build/lib/ioc/ListModules.d.ts +4 -0
- package/build/lib/ioc/ListModules.js +8 -0
- package/build/lib/ioc/LoadModuleNative.cjs +14 -0
- package/build/lib/ioc/LoadModuleNative.d.cts +9 -0
- package/build/lib/ioc/LoadModuleNative.d.ts +9 -0
- package/build/lib/ioc/LoadModuleNative.js +5 -0
- package/build/lib/ioc/LoadModules.cjs +26 -0
- package/build/lib/ioc/LoadModules.d.cts +4 -0
- package/build/lib/ioc/LoadModules.d.ts +4 -0
- package/build/lib/ioc/LoadModules.js +17 -0
- package/build/lib/ioc/ParamParser.cjs +15 -0
- package/build/lib/ioc/ParamParser.d.cts +25 -0
- package/build/lib/ioc/ParamParser.d.ts +25 -0
- package/build/lib/ioc/ParamParser.js +6 -0
- package/build/lib/ioc/Resolvers.cjs +49 -0
- package/build/lib/ioc/Resolvers.d.cts +4 -0
- package/build/lib/ioc/Resolvers.d.ts +4 -0
- package/build/lib/ioc/Resolvers.js +16 -0
- package/build/lib/ioc/Utils.cjs +35 -0
- package/build/lib/ioc/Utils.d.cts +38 -0
- package/build/lib/ioc/Utils.d.ts +38 -0
- package/build/lib/ioc/Utils.js +6 -0
- package/build/options/ApplicationOptions.cjs +50 -0
- package/build/options/ApplicationOptions.d.cts +20 -0
- package/build/options/ApplicationOptions.d.ts +20 -0
- package/build/options/ApplicationOptions.js +41 -0
- package/build/options/LoadComponentOptions.cjs +50 -0
- package/build/options/LoadComponentOptions.d.cts +22 -0
- package/build/options/LoadComponentOptions.d.ts +22 -0
- package/build/options/LoadComponentOptions.js +41 -0
- package/build/options/LoadEntryClassOptions.cjs +50 -0
- package/build/options/LoadEntryClassOptions.d.cts +16 -0
- package/build/options/LoadEntryClassOptions.d.ts +16 -0
- package/build/options/LoadEntryClassOptions.js +41 -0
- package/build/options/LoadEntryCommonOptions.cjs +27 -0
- package/build/options/LoadEntryCommonOptions.d.cts +13 -0
- package/build/options/LoadEntryCommonOptions.d.ts +13 -0
- package/build/options/LoadEntryCommonOptions.js +18 -0
- package/build/options/LoadModuleOptions.cjs +50 -0
- package/build/options/LoadModuleOptions.d.cts +20 -0
- package/build/options/LoadModuleOptions.d.ts +20 -0
- package/build/options/LoadModuleOptions.js +41 -0
- package/build/options/ModuleOptions.cjs +50 -0
- package/build/options/ModuleOptions.d.cts +20 -0
- package/build/options/ModuleOptions.d.ts +20 -0
- package/build/options/ModuleOptions.js +41 -0
- package/build/types/AsyncFunction.cjs +7 -0
- package/build/types/AsyncFunction.d.cts +3 -0
- package/build/types/AsyncFunction.d.ts +3 -0
- package/build/types/AsyncFunction.js +4 -0
- package/build/types/ControllerActionMapItem.cjs +7 -0
- package/build/types/ControllerActionMapItem.d.cts +20 -0
- package/build/types/ControllerActionMapItem.d.ts +20 -0
- package/build/types/ControllerActionMapItem.js +4 -0
- package/build/types/InjectionProperties.cjs +7 -0
- package/build/types/InjectionProperties.d.cts +3 -0
- package/build/types/InjectionProperties.d.ts +3 -0
- package/build/types/InjectionProperties.js +4 -0
- package/build/types/TimeInput.cjs +7 -0
- package/build/types/TimeInput.d.cts +5 -0
- package/build/types/TimeInput.d.ts +5 -0
- package/build/types/TimeInput.js +4 -0
- package/build/types/TimeObject.cjs +7 -0
- package/build/types/TimeObject.d.cts +11 -0
- package/build/types/TimeObject.d.ts +11 -0
- package/build/types/TimeObject.js +4 -0
- package/build/types/UnitOfTime.cjs +7 -0
- package/build/types/UnitOfTime.d.cts +14 -0
- package/build/types/UnitOfTime.d.ts +14 -0
- package/build/types/UnitOfTime.js +4 -0
- package/package.json +145 -0
|
@@ -0,0 +1,585 @@
|
|
|
1
|
+
import { require_is_glob } from './chunk-J6RXNX2K.js';
|
|
2
|
+
import { OBJECT_INIT_MARK } from './chunk-4OHSPWRQ.js';
|
|
3
|
+
import { __commonJS, init_esm_shims, __require, __name, __toESM } from './chunk-5NK7E2HA.js';
|
|
4
|
+
import { setTimeout } from 'timers/promises';
|
|
5
|
+
import { isPromise as isPromise$1 } from 'util/types';
|
|
6
|
+
import { Stream } from 'stream';
|
|
7
|
+
|
|
8
|
+
// node_modules/randombytes/index.js
|
|
9
|
+
var require_randombytes = __commonJS({
|
|
10
|
+
"node_modules/randombytes/index.js"(exports, module) {
|
|
11
|
+
init_esm_shims();
|
|
12
|
+
module.exports = __require("crypto").randomBytes;
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
// node_modules/randomstring/lib/charset.js
|
|
17
|
+
var require_charset = __commonJS({
|
|
18
|
+
"node_modules/randomstring/lib/charset.js"(exports, module) {
|
|
19
|
+
init_esm_shims();
|
|
20
|
+
function Charset() {
|
|
21
|
+
this.chars = "";
|
|
22
|
+
}
|
|
23
|
+
__name(Charset, "Charset");
|
|
24
|
+
Charset.prototype.setType = function(type) {
|
|
25
|
+
if (Array.isArray(type)) {
|
|
26
|
+
for (var i = 0; i < type.length; i++) {
|
|
27
|
+
this.chars += this.getCharacters(type[i]);
|
|
28
|
+
}
|
|
29
|
+
} else {
|
|
30
|
+
this.chars = this.getCharacters(type);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
Charset.prototype.getCharacters = function(type) {
|
|
34
|
+
var chars;
|
|
35
|
+
var numbers = "0123456789";
|
|
36
|
+
var charsLower = "abcdefghijklmnopqrstuvwxyz";
|
|
37
|
+
var charsUpper = charsLower.toUpperCase();
|
|
38
|
+
var hexChars = "abcdef";
|
|
39
|
+
var binaryChars = "01";
|
|
40
|
+
var octalChars = "01234567";
|
|
41
|
+
if (type === "alphanumeric") {
|
|
42
|
+
chars = numbers + charsLower + charsUpper;
|
|
43
|
+
} else if (type === "numeric") {
|
|
44
|
+
chars = numbers;
|
|
45
|
+
} else if (type === "alphabetic") {
|
|
46
|
+
chars = charsLower + charsUpper;
|
|
47
|
+
} else if (type === "hex") {
|
|
48
|
+
chars = numbers + hexChars;
|
|
49
|
+
} else if (type === "binary") {
|
|
50
|
+
chars = binaryChars;
|
|
51
|
+
} else if (type === "octal") {
|
|
52
|
+
chars = octalChars;
|
|
53
|
+
} else {
|
|
54
|
+
chars = type;
|
|
55
|
+
}
|
|
56
|
+
return chars;
|
|
57
|
+
};
|
|
58
|
+
Charset.prototype.removeUnreadable = function() {
|
|
59
|
+
var unreadableChars = /[0OIl]/g;
|
|
60
|
+
this.chars = this.chars.replace(unreadableChars, "");
|
|
61
|
+
};
|
|
62
|
+
Charset.prototype.setcapitalization = function(capitalization) {
|
|
63
|
+
if (capitalization === "uppercase") {
|
|
64
|
+
this.chars = this.chars.toUpperCase();
|
|
65
|
+
} else if (capitalization === "lowercase") {
|
|
66
|
+
this.chars = this.chars.toLowerCase();
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
Charset.prototype.removeDuplicates = function() {
|
|
70
|
+
var charMap = this.chars.split("");
|
|
71
|
+
charMap = [...new Set(charMap)];
|
|
72
|
+
this.chars = charMap.join("");
|
|
73
|
+
};
|
|
74
|
+
module.exports = Charset;
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
// node_modules/randomstring/lib/randomstring.js
|
|
79
|
+
var require_randomstring = __commonJS({
|
|
80
|
+
"node_modules/randomstring/lib/randomstring.js"(exports) {
|
|
81
|
+
init_esm_shims();
|
|
82
|
+
var randomBytes = require_randombytes();
|
|
83
|
+
var Charset = require_charset();
|
|
84
|
+
function unsafeRandomBytes(length) {
|
|
85
|
+
var stack = [];
|
|
86
|
+
for (var i = 0; i < length; i++) {
|
|
87
|
+
stack.push(Math.floor(Math.random() * 255));
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
length,
|
|
91
|
+
readUInt8: function(index) {
|
|
92
|
+
return stack[index];
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
__name(unsafeRandomBytes, "unsafeRandomBytes");
|
|
97
|
+
function safeRandomBytes(length) {
|
|
98
|
+
try {
|
|
99
|
+
return randomBytes(length);
|
|
100
|
+
} catch (e) {
|
|
101
|
+
return unsafeRandomBytes(length);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
__name(safeRandomBytes, "safeRandomBytes");
|
|
105
|
+
function processString(buf, initialString, chars, reqLen, maxByte) {
|
|
106
|
+
var string = initialString;
|
|
107
|
+
for (var i = 0; i < buf.length && string.length < reqLen; i++) {
|
|
108
|
+
var randomByte = buf.readUInt8(i);
|
|
109
|
+
if (randomByte < maxByte) {
|
|
110
|
+
string += chars.charAt(randomByte % chars.length);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return string;
|
|
114
|
+
}
|
|
115
|
+
__name(processString, "processString");
|
|
116
|
+
function getAsyncString(string, chars, length, maxByte, cb) {
|
|
117
|
+
randomBytes(length, function(err, buf) {
|
|
118
|
+
if (err) {
|
|
119
|
+
cb(err);
|
|
120
|
+
}
|
|
121
|
+
var generatedString = processString(buf, string, chars, length, maxByte);
|
|
122
|
+
if (generatedString.length < length) {
|
|
123
|
+
getAsyncString(generatedString, chars, length, maxByte, cb);
|
|
124
|
+
} else {
|
|
125
|
+
cb(null, generatedString);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
__name(getAsyncString, "getAsyncString");
|
|
130
|
+
exports.generate = function(options, cb) {
|
|
131
|
+
var charset = new Charset();
|
|
132
|
+
var length, string = "";
|
|
133
|
+
if (typeof options === "object") {
|
|
134
|
+
length = typeof options.length === "number" ? options.length : 32;
|
|
135
|
+
if (options.charset) {
|
|
136
|
+
charset.setType(options.charset);
|
|
137
|
+
} else {
|
|
138
|
+
charset.setType("alphanumeric");
|
|
139
|
+
}
|
|
140
|
+
if (options.capitalization) {
|
|
141
|
+
charset.setcapitalization(options.capitalization);
|
|
142
|
+
}
|
|
143
|
+
if (options.readable) {
|
|
144
|
+
charset.removeUnreadable();
|
|
145
|
+
}
|
|
146
|
+
charset.removeDuplicates();
|
|
147
|
+
} else if (typeof options === "number") {
|
|
148
|
+
length = options;
|
|
149
|
+
charset.setType("alphanumeric");
|
|
150
|
+
} else {
|
|
151
|
+
length = 32;
|
|
152
|
+
charset.setType("alphanumeric");
|
|
153
|
+
}
|
|
154
|
+
var charsLen = charset.chars.length;
|
|
155
|
+
var maxByte = 256 - 256 % charsLen;
|
|
156
|
+
if (!cb) {
|
|
157
|
+
while (string.length < length) {
|
|
158
|
+
var buf = safeRandomBytes(Math.ceil(length * 256 / maxByte));
|
|
159
|
+
string = processString(buf, string, charset.chars, length, maxByte);
|
|
160
|
+
}
|
|
161
|
+
return string;
|
|
162
|
+
}
|
|
163
|
+
getAsyncString(string, charset.chars, length, maxByte, cb);
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
// node_modules/randomstring/index.js
|
|
169
|
+
var require_randomstring2 = __commonJS({
|
|
170
|
+
"node_modules/randomstring/index.js"(exports, module) {
|
|
171
|
+
init_esm_shims();
|
|
172
|
+
module.exports = require_randomstring();
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
// src/Utilities.ts
|
|
177
|
+
init_esm_shims();
|
|
178
|
+
|
|
179
|
+
// node_modules/sort-array/index.mjs
|
|
180
|
+
init_esm_shims();
|
|
181
|
+
|
|
182
|
+
// node_modules/array-back/index.mjs
|
|
183
|
+
init_esm_shims();
|
|
184
|
+
function isObject(input) {
|
|
185
|
+
return typeof input === "object" && input !== null;
|
|
186
|
+
}
|
|
187
|
+
__name(isObject, "isObject");
|
|
188
|
+
function isArrayLike(input) {
|
|
189
|
+
return isObject(input) && typeof input.length === "number";
|
|
190
|
+
}
|
|
191
|
+
__name(isArrayLike, "isArrayLike");
|
|
192
|
+
function arrayify(input) {
|
|
193
|
+
if (Array.isArray(input)) {
|
|
194
|
+
return input;
|
|
195
|
+
} else if (input === void 0) {
|
|
196
|
+
return [];
|
|
197
|
+
} else if (isArrayLike(input) || input instanceof Set) {
|
|
198
|
+
return Array.from(input);
|
|
199
|
+
} else {
|
|
200
|
+
return [input];
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
__name(arrayify, "arrayify");
|
|
204
|
+
var array_back_default = arrayify;
|
|
205
|
+
|
|
206
|
+
// node_modules/typical/index.mjs
|
|
207
|
+
init_esm_shims();
|
|
208
|
+
function isNumber(n) {
|
|
209
|
+
return !isNaN(parseFloat(n)) && isFinite(n);
|
|
210
|
+
}
|
|
211
|
+
__name(isNumber, "isNumber");
|
|
212
|
+
function isPlainObject(input) {
|
|
213
|
+
return input !== null && typeof input === "object" && input.constructor === Object;
|
|
214
|
+
}
|
|
215
|
+
__name(isPlainObject, "isPlainObject");
|
|
216
|
+
function isArrayLike2(input) {
|
|
217
|
+
return isObject2(input) && typeof input.length === "number";
|
|
218
|
+
}
|
|
219
|
+
__name(isArrayLike2, "isArrayLike");
|
|
220
|
+
function isObject2(input) {
|
|
221
|
+
return typeof input === "object" && input !== null;
|
|
222
|
+
}
|
|
223
|
+
__name(isObject2, "isObject");
|
|
224
|
+
function isDefined(input) {
|
|
225
|
+
return typeof input !== "undefined";
|
|
226
|
+
}
|
|
227
|
+
__name(isDefined, "isDefined");
|
|
228
|
+
function isUndefined(input) {
|
|
229
|
+
return !isDefined(input);
|
|
230
|
+
}
|
|
231
|
+
__name(isUndefined, "isUndefined");
|
|
232
|
+
function isNull(input) {
|
|
233
|
+
return input === null;
|
|
234
|
+
}
|
|
235
|
+
__name(isNull, "isNull");
|
|
236
|
+
function isDefinedValue(input) {
|
|
237
|
+
return isDefined(input) && !isNull(input) && !Number.isNaN(input);
|
|
238
|
+
}
|
|
239
|
+
__name(isDefinedValue, "isDefinedValue");
|
|
240
|
+
function isClass(input) {
|
|
241
|
+
if (typeof input === "function") {
|
|
242
|
+
return /^class /.test(Function.prototype.toString.call(input));
|
|
243
|
+
} else {
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
__name(isClass, "isClass");
|
|
248
|
+
function isPrimitive(input) {
|
|
249
|
+
if (input === null)
|
|
250
|
+
return true;
|
|
251
|
+
switch (typeof input) {
|
|
252
|
+
case "string":
|
|
253
|
+
case "number":
|
|
254
|
+
case "symbol":
|
|
255
|
+
case "undefined":
|
|
256
|
+
case "boolean":
|
|
257
|
+
return true;
|
|
258
|
+
default:
|
|
259
|
+
return false;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
__name(isPrimitive, "isPrimitive");
|
|
263
|
+
function isPromise(input) {
|
|
264
|
+
if (input) {
|
|
265
|
+
const isPromise3 = isDefined(Promise) && input instanceof Promise;
|
|
266
|
+
const isThenable = input.then && typeof input.then === "function";
|
|
267
|
+
return !!(isPromise3 || isThenable);
|
|
268
|
+
} else {
|
|
269
|
+
return false;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
__name(isPromise, "isPromise");
|
|
273
|
+
function isIterable(input) {
|
|
274
|
+
if (input === null || !isDefined(input)) {
|
|
275
|
+
return false;
|
|
276
|
+
} else {
|
|
277
|
+
return typeof input[Symbol.iterator] === "function" || typeof input[Symbol.asyncIterator] === "function";
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
__name(isIterable, "isIterable");
|
|
281
|
+
function isString(input) {
|
|
282
|
+
return typeof input === "string";
|
|
283
|
+
}
|
|
284
|
+
__name(isString, "isString");
|
|
285
|
+
function isFunction(input) {
|
|
286
|
+
return typeof input === "function";
|
|
287
|
+
}
|
|
288
|
+
__name(isFunction, "isFunction");
|
|
289
|
+
var typical_default = {
|
|
290
|
+
isNumber,
|
|
291
|
+
isPlainObject,
|
|
292
|
+
isArrayLike: isArrayLike2,
|
|
293
|
+
isObject: isObject2,
|
|
294
|
+
isDefined,
|
|
295
|
+
isUndefined,
|
|
296
|
+
isNull,
|
|
297
|
+
isDefinedValue,
|
|
298
|
+
isClass,
|
|
299
|
+
isPrimitive,
|
|
300
|
+
isPromise,
|
|
301
|
+
isIterable,
|
|
302
|
+
isString,
|
|
303
|
+
isFunction
|
|
304
|
+
};
|
|
305
|
+
|
|
306
|
+
// node_modules/sort-array/index.mjs
|
|
307
|
+
function sortArray(arr, options = {}) {
|
|
308
|
+
options = Object.assign(
|
|
309
|
+
{
|
|
310
|
+
computed: {},
|
|
311
|
+
customOrders: {},
|
|
312
|
+
nullRank: 1,
|
|
313
|
+
undefinedRank: 1
|
|
314
|
+
},
|
|
315
|
+
options
|
|
316
|
+
);
|
|
317
|
+
arr.sort(getCompareFunc(options));
|
|
318
|
+
return arr;
|
|
319
|
+
}
|
|
320
|
+
__name(sortArray, "sortArray");
|
|
321
|
+
function getCompareFunc(options = {}) {
|
|
322
|
+
const by = array_back_default(options.by);
|
|
323
|
+
const order = array_back_default(options.order);
|
|
324
|
+
const { customOrders, computed } = options;
|
|
325
|
+
return /* @__PURE__ */ __name(function compareFunc(xIn, yIn, byIndex = 0) {
|
|
326
|
+
const currOrder = order[byIndex] || "asc";
|
|
327
|
+
if (!(currOrder === "asc" || currOrder === "desc" || customOrders[currOrder])) {
|
|
328
|
+
return 0;
|
|
329
|
+
}
|
|
330
|
+
let result, x, y;
|
|
331
|
+
if (by.length) {
|
|
332
|
+
x = typical_default.isDefined(xIn[by[byIndex]]) ? xIn[by[byIndex]] : computed[by[byIndex]] && computed[by[byIndex]](xIn);
|
|
333
|
+
y = typical_default.isDefined(yIn[by[byIndex]]) ? yIn[by[byIndex]] : computed[by[byIndex]] && computed[by[byIndex]](yIn);
|
|
334
|
+
} else {
|
|
335
|
+
x = xIn;
|
|
336
|
+
y = yIn;
|
|
337
|
+
}
|
|
338
|
+
if (customOrders && customOrders[currOrder]) {
|
|
339
|
+
result = customOrders[currOrder].indexOf(x) - customOrders[currOrder].indexOf(y);
|
|
340
|
+
} else if (x === y) {
|
|
341
|
+
result = 0;
|
|
342
|
+
} else if (typical_default.isNull(x) && typical_default.isUndefined(y)) {
|
|
343
|
+
result = currOrder === "asc" ? 1 : currOrder === "desc" ? -1 : 0;
|
|
344
|
+
} else if (typical_default.isUndefined(x) && typical_default.isNull(y)) {
|
|
345
|
+
result = currOrder === "asc" ? -1 : currOrder === "desc" ? 1 : 0;
|
|
346
|
+
} else if (typical_default.isNull(x) && typical_default.isDefinedValue(y)) {
|
|
347
|
+
result = options.nullRank;
|
|
348
|
+
} else if (typical_default.isUndefined(x) && typical_default.isDefinedValue(y)) {
|
|
349
|
+
result = options.undefinedRank;
|
|
350
|
+
} else if (typical_default.isNull(y) && typical_default.isDefinedValue(x)) {
|
|
351
|
+
result = -options.nullRank;
|
|
352
|
+
} else if (typical_default.isUndefined(y) && typical_default.isDefinedValue(x)) {
|
|
353
|
+
result = -options.undefinedRank;
|
|
354
|
+
} else {
|
|
355
|
+
result = x < y ? -1 : x > y ? 1 : 0;
|
|
356
|
+
if (currOrder === "desc") {
|
|
357
|
+
result = result * -1;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
if (result === 0 && typical_default.isDefined(by[byIndex + 1])) {
|
|
361
|
+
result = compareFunc(xIn, yIn, byIndex + 1);
|
|
362
|
+
}
|
|
363
|
+
return result;
|
|
364
|
+
}, "compareFunc");
|
|
365
|
+
}
|
|
366
|
+
__name(getCompareFunc, "getCompareFunc");
|
|
367
|
+
var sort_array_default = sortArray;
|
|
368
|
+
|
|
369
|
+
// node_modules/sort-keys/index.js
|
|
370
|
+
init_esm_shims();
|
|
371
|
+
|
|
372
|
+
// node_modules/is-plain-obj/index.js
|
|
373
|
+
init_esm_shims();
|
|
374
|
+
function isPlainObject2(value) {
|
|
375
|
+
if (typeof value !== "object" || value === null) {
|
|
376
|
+
return false;
|
|
377
|
+
}
|
|
378
|
+
const prototype = Object.getPrototypeOf(value);
|
|
379
|
+
return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);
|
|
380
|
+
}
|
|
381
|
+
__name(isPlainObject2, "isPlainObject");
|
|
382
|
+
|
|
383
|
+
// node_modules/sort-keys/index.js
|
|
384
|
+
function sortKeys(object, options = {}) {
|
|
385
|
+
if (!isPlainObject2(object) && !Array.isArray(object)) {
|
|
386
|
+
throw new TypeError("Expected a plain object or array");
|
|
387
|
+
}
|
|
388
|
+
const { deep, compare } = options;
|
|
389
|
+
const seenInput = [];
|
|
390
|
+
const seenOutput = [];
|
|
391
|
+
const deepSortArray = /* @__PURE__ */ __name((array) => {
|
|
392
|
+
const seenIndex = seenInput.indexOf(array);
|
|
393
|
+
if (seenIndex !== -1) {
|
|
394
|
+
return seenOutput[seenIndex];
|
|
395
|
+
}
|
|
396
|
+
const result = [];
|
|
397
|
+
seenInput.push(array);
|
|
398
|
+
seenOutput.push(result);
|
|
399
|
+
result.push(...array.map((item) => {
|
|
400
|
+
if (Array.isArray(item)) {
|
|
401
|
+
return deepSortArray(item);
|
|
402
|
+
}
|
|
403
|
+
if (isPlainObject2(item)) {
|
|
404
|
+
return _sortKeys(item);
|
|
405
|
+
}
|
|
406
|
+
return item;
|
|
407
|
+
}));
|
|
408
|
+
return result;
|
|
409
|
+
}, "deepSortArray");
|
|
410
|
+
const _sortKeys = /* @__PURE__ */ __name((object2) => {
|
|
411
|
+
const seenIndex = seenInput.indexOf(object2);
|
|
412
|
+
if (seenIndex !== -1) {
|
|
413
|
+
return seenOutput[seenIndex];
|
|
414
|
+
}
|
|
415
|
+
const result = {};
|
|
416
|
+
const keys = Object.keys(object2).sort(compare);
|
|
417
|
+
seenInput.push(object2);
|
|
418
|
+
seenOutput.push(result);
|
|
419
|
+
for (const key of keys) {
|
|
420
|
+
const value = object2[key];
|
|
421
|
+
let newValue;
|
|
422
|
+
if (deep && Array.isArray(value)) {
|
|
423
|
+
newValue = deepSortArray(value);
|
|
424
|
+
} else {
|
|
425
|
+
newValue = deep && isPlainObject2(value) ? _sortKeys(value) : value;
|
|
426
|
+
}
|
|
427
|
+
Object.defineProperty(result, key, {
|
|
428
|
+
...Object.getOwnPropertyDescriptor(object2, key),
|
|
429
|
+
value: newValue
|
|
430
|
+
});
|
|
431
|
+
}
|
|
432
|
+
return result;
|
|
433
|
+
}, "_sortKeys");
|
|
434
|
+
if (Array.isArray(object)) {
|
|
435
|
+
return deep ? deepSortArray(object) : object.slice();
|
|
436
|
+
}
|
|
437
|
+
return _sortKeys(object);
|
|
438
|
+
}
|
|
439
|
+
__name(sortKeys, "sortKeys");
|
|
440
|
+
|
|
441
|
+
// src/Utilities.ts
|
|
442
|
+
var import_is_glob = __toESM(require_is_glob(), 1);
|
|
443
|
+
var randomString = __toESM(require_randomstring2(), 1);
|
|
444
|
+
function IsEqual(val1, val2) {
|
|
445
|
+
const compareSet = /* @__PURE__ */ new Set();
|
|
446
|
+
compareSet.add(val1).add(val2);
|
|
447
|
+
return compareSet.size === 2;
|
|
448
|
+
}
|
|
449
|
+
__name(IsEqual, "IsEqual");
|
|
450
|
+
function IsPath(inp) {
|
|
451
|
+
try {
|
|
452
|
+
const pathRegex = new RegExp('^(\\/|\\.\\.?\\/|([A-Za-z]:)?\\\\)([^\\\\\\/:*?"<>|\\r\\n]+[\\\\\\/])*[^\\\\\\/:*?"<>|\\r\\n]*$');
|
|
453
|
+
return pathRegex.test(As(inp));
|
|
454
|
+
} catch (e) {
|
|
455
|
+
return false;
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
__name(IsPath, "IsPath");
|
|
459
|
+
function* ConvertToIterable(inp) {
|
|
460
|
+
for (let i = 0; i < inp.length; i++)
|
|
461
|
+
yield inp[i];
|
|
462
|
+
}
|
|
463
|
+
__name(ConvertToIterable, "ConvertToIterable");
|
|
464
|
+
function ConvertToStream(inp, options) {
|
|
465
|
+
options = options ? options : {};
|
|
466
|
+
return Stream.Readable.from(ConvertToIterable(inp), options);
|
|
467
|
+
}
|
|
468
|
+
__name(ConvertToStream, "ConvertToStream");
|
|
469
|
+
function isPromise2(target) {
|
|
470
|
+
return isPromise$1(target) ? true : !!target && (typeof target === "object" || typeof target === "function") && typeof target.then === "function";
|
|
471
|
+
}
|
|
472
|
+
__name(isPromise2, "isPromise");
|
|
473
|
+
async function Delay(ms = 1e3) {
|
|
474
|
+
return await setTimeout(ms);
|
|
475
|
+
}
|
|
476
|
+
__name(Delay, "Delay");
|
|
477
|
+
function ThrowIntoBlackHole(...args) {
|
|
478
|
+
}
|
|
479
|
+
__name(ThrowIntoBlackHole, "ThrowIntoBlackHole");
|
|
480
|
+
function IsObjectInitialized(obj) {
|
|
481
|
+
return !!Reflect.getOwnMetadata(OBJECT_INIT_MARK, obj);
|
|
482
|
+
}
|
|
483
|
+
__name(IsObjectInitialized, "IsObjectInitialized");
|
|
484
|
+
function MergeSet(s1, s2) {
|
|
485
|
+
return /* @__PURE__ */ new Set([...s1, ...s2]);
|
|
486
|
+
}
|
|
487
|
+
__name(MergeSet, "MergeSet");
|
|
488
|
+
function MergeArray(arr1, arr2) {
|
|
489
|
+
return [...arr1, ...arr2];
|
|
490
|
+
}
|
|
491
|
+
__name(MergeArray, "MergeArray");
|
|
492
|
+
function MergeMap(m1, m2) {
|
|
493
|
+
return new Map([...m1, ...m2]);
|
|
494
|
+
}
|
|
495
|
+
__name(MergeMap, "MergeMap");
|
|
496
|
+
function SetToArray(set) {
|
|
497
|
+
return Array.from(set);
|
|
498
|
+
}
|
|
499
|
+
__name(SetToArray, "SetToArray");
|
|
500
|
+
function ArrayToSet(arr) {
|
|
501
|
+
return new Set(arr);
|
|
502
|
+
}
|
|
503
|
+
__name(ArrayToSet, "ArrayToSet");
|
|
504
|
+
function UniqueArray(arr) {
|
|
505
|
+
return Array.from(new Set(arr));
|
|
506
|
+
}
|
|
507
|
+
__name(UniqueArray, "UniqueArray");
|
|
508
|
+
function SortArray(arr, ...options) {
|
|
509
|
+
if (options.length < 2) {
|
|
510
|
+
let sortOptions = { order: "asc" };
|
|
511
|
+
if (options.length)
|
|
512
|
+
sortOptions = Object.assign(sortOptions, {
|
|
513
|
+
by: options[0].by,
|
|
514
|
+
order: options[0].order,
|
|
515
|
+
computed: options[0].computed
|
|
516
|
+
});
|
|
517
|
+
return sort_array_default(arr, sortOptions);
|
|
518
|
+
} else {
|
|
519
|
+
const sortsOptions = {
|
|
520
|
+
by: [],
|
|
521
|
+
order: [],
|
|
522
|
+
customOrders: {}
|
|
523
|
+
};
|
|
524
|
+
options.forEach((opt) => {
|
|
525
|
+
if (opt.by) {
|
|
526
|
+
const field = opt.by;
|
|
527
|
+
sortsOptions.by.push(field);
|
|
528
|
+
sortsOptions.order.push(field);
|
|
529
|
+
sortsOptions.customOrders[field] = SortArray(arr, opt).map((value) => value[field]);
|
|
530
|
+
}
|
|
531
|
+
});
|
|
532
|
+
return sort_array_default(arr, sortsOptions);
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
__name(SortArray, "SortArray");
|
|
536
|
+
function SortObject(object, options) {
|
|
537
|
+
return sortKeys(object, {
|
|
538
|
+
deep: options == null ? void 0 : options.deep,
|
|
539
|
+
compare: (a, b) => {
|
|
540
|
+
switch (options == null ? void 0 : options.order) {
|
|
541
|
+
case "asc":
|
|
542
|
+
return a.localeCompare(b);
|
|
543
|
+
case "desc":
|
|
544
|
+
return -a.localeCompare(b);
|
|
545
|
+
default:
|
|
546
|
+
return a.localeCompare(b);
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
});
|
|
550
|
+
}
|
|
551
|
+
__name(SortObject, "SortObject");
|
|
552
|
+
function ConfigureObjectProperties(target, properties) {
|
|
553
|
+
Object.keys(properties ? properties : {}).forEach((propertyKey) => target[propertyKey] = properties[propertyKey]);
|
|
554
|
+
}
|
|
555
|
+
__name(ConfigureObjectProperties, "ConfigureObjectProperties");
|
|
556
|
+
function As(inp) {
|
|
557
|
+
return inp;
|
|
558
|
+
}
|
|
559
|
+
__name(As, "As");
|
|
560
|
+
function IsGlobString(inp) {
|
|
561
|
+
return (0, import_is_glob.default)(inp);
|
|
562
|
+
}
|
|
563
|
+
__name(IsGlobString, "IsGlobString");
|
|
564
|
+
function RandomString(length, charset) {
|
|
565
|
+
return randomString.generate({
|
|
566
|
+
length: length !== void 0 ? length : 32,
|
|
567
|
+
charset: As(charset !== void 0 ? charset : "alphanumeric")
|
|
568
|
+
});
|
|
569
|
+
}
|
|
570
|
+
__name(RandomString, "RandomString");
|
|
571
|
+
function NonceStr() {
|
|
572
|
+
return RandomString(32, "alphanumeric");
|
|
573
|
+
}
|
|
574
|
+
__name(NonceStr, "NonceStr");
|
|
575
|
+
function ParentConstructor(target) {
|
|
576
|
+
const rootProto = Symbol.constructor.prototype.constructor.__proto__;
|
|
577
|
+
const constructor = !!target[Symbol.hasInstance] && target.prototype ? target : target.constructor;
|
|
578
|
+
const proto = constructor.prototype.constructor.__proto__;
|
|
579
|
+
return proto === rootProto ? null : proto;
|
|
580
|
+
}
|
|
581
|
+
__name(ParentConstructor, "ParentConstructor");
|
|
582
|
+
|
|
583
|
+
export { ArrayToSet, As, ConfigureObjectProperties, ConvertToIterable, ConvertToStream, Delay, IsEqual, IsGlobString, IsObjectInitialized, IsPath, MergeArray, MergeMap, MergeSet, NonceStr, ParentConstructor, RandomString, SetToArray, SortArray, SortObject, ThrowIntoBlackHole, UniqueArray, isPromise2 as isPromise };
|
|
584
|
+
//# sourceMappingURL=out.js.map
|
|
585
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9yYW5kb21ieXRlcy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yYW5kb21zdHJpbmcvbGliL2NoYXJzZXQuanMiLCIuLi9ub2RlX21vZHVsZXMvcmFuZG9tc3RyaW5nL2xpYi9yYW5kb21zdHJpbmcuanMiLCIuLi9ub2RlX21vZHVsZXMvcmFuZG9tc3RyaW5nL2luZGV4LmpzIiwiLi4vc3JjL1V0aWxpdGllcy50cyIsIi4uL25vZGVfbW9kdWxlcy9zb3J0LWFycmF5L2luZGV4Lm1qcyIsIi4uL25vZGVfbW9kdWxlcy9hcnJheS1iYWNrL2luZGV4Lm1qcyIsIi4uL25vZGVfbW9kdWxlcy90eXBpY2FsL2luZGV4Lm1qcyIsIi4uL25vZGVfbW9kdWxlcy9zb3J0LWtleXMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvaXMtcGxhaW4tb2JqL2luZGV4LmpzIl0sIm5hbWVzIjpbInJlcXVpcmVfcmFuZG9tc3RyaW5nIiwiaXNBcnJheUxpa2UiLCJpc09iamVjdCIsImlzUHJvbWlzZSIsImlzUGxhaW5PYmplY3QiLCJvYmplY3QiLCJpc0dsb2IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FBTyxVQUFVLFVBQVEsUUFBUSxFQUFFO0FBQUE7QUFBQTs7O0FDQW5DO0FBQUE7QUFBQTtBQUFBO0FBQUEsYUFBUyxVQUFVO0FBQ2pCLFdBQUssUUFBUTtBQUFBLElBQ2Y7QUFGUztBQUlULFlBQVEsVUFBVSxVQUFVLFNBQVMsTUFBTTtBQUN6QyxVQUFJLE1BQU0sUUFBUSxJQUFJLEdBQUc7QUFDdkIsaUJBQVMsSUFBRSxHQUFHLElBQUksS0FBSyxRQUFRLEtBQUs7QUFDbEMsZUFBSyxTQUFTLEtBQUssY0FBYyxLQUFLLENBQUMsQ0FBQztBQUFBLFFBQzFDO0FBQUEsTUFDRixPQUNLO0FBQ0gsYUFBSyxRQUFRLEtBQUssY0FBYyxJQUFJO0FBQUEsTUFDdEM7QUFBQSxJQUNGO0FBRUEs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QUFPLFVBQVUsWUFBWSxPQUFPO0FBQ3hDO0FBTGdCIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdjcnlwdG8nKS5yYW5kb21CeXRlc1xuIiwiZnVuY3Rpb24gQ2hhcnNldCgpIHtcbiAgdGhpcy5jaGFycyA9ICcnO1xufVxuXG5DaGFyc2V0LnByb3RvdHlwZS5zZXRUeXBlID0gZnVuY3Rpb24odHlwZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgIGZvciAodmFyIGk9MDsgaSA8IHR5cGUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuY2hhcnMgKz0gdGhpcy5nZXRDaGFyYWN0ZXJzKHR5cGVbaV0pO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICB0aGlzLmNoYXJzID0gdGhpcy5nZXRDaGFyYWN0ZXJzKHR5cGUpO1xuICB9XG59XG5cbkNoYXJzZXQucHJvdG90eXBlLmdldENoYXJhY3RlcnMgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciBjaGFycztcblxuICB2YXIgbnVtYmVycyAgICAgPSAnMDEyMzQ1Njc4OSc7XG4gIHZhciBjaGFyc0xvd2VyICA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eic7XG4gIHZhciBjaGFyc1VwcGVyICA9IGNoYXJzTG93ZXIudG9VcHBlckNhc2UoKTtcbiAgdmFyIGhleENoYXJzICAgID0gJ2FiY2RlZic7XG4gIHZhciBiaW5hcnlDaGFycyA9ICcwMSc7XG4gIHZhciBvY3RhbENoYXJzICA9ICcwMTIzNDU2Nyc7XG5cbiAgaWYgKHR5cGUgPT09ICdhbHBoYW51bWVyaWMnKSB7XG4gICAgY2hhcnMgPSBudW1iZXJzICsgY2hhcnNMb3dlciArIGNoYXJzVXBwZXI7XG4gIH1cbiAgZWxzZSBpZiAodHlwZSA9PT0gJ251bWVyaWMnKSB7XG4gICAgY2hhcnMgPSBudW1iZXJzO1xuICB9XG4gIGVsc2UgaWYgKHR5cGUgPT09ICdhbHBoYWJldGljJykge1xuICAgIGNoYXJzID0gY2hhcnNMb3dlciArIGNoYXJzVXBwZXI7XG4gIH1cbiAgZWxzZSBpZiAodHlwZSA9PT0gJ2hleCcpIHtcbiAgICBjaGFycyA9IG51bWJlcnMgKyBoZXhDaGFycztcbiAgfVxuICBlbHNlIGlmICh0eXBlID09PSAnYmluYXJ5Jykge1xuICAgIGNoYXJzID0gYmluYXJ5Q2hhcnM7XG4gIH1cbiAgZWxzZSBpZiAodHlwZSA9PT0gJ29jdGFsJykge1xuICAgIGNoYXJzID0gb2N0YWxDaGFycztcbiAgfVxuICBlbHNlIHtcbiAgICBjaGFycyA9IHR5cGU7XG4gIH1cblxuICByZXR1cm4gY2hhcnM7XG59XG5cbkNoYXJzZXQucHJvdG90eXBlLnJlbW92ZVVucmVhZGFibGUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHVucmVhZGFibGVDaGFycyA9IC9bME9JbF0vZztcbiAgdGhpcy5jaGFycyA9IHRoaXMuY2hhcnMucmVwbGFjZSh1bnJlYWRhYmxlQ2hhcnMsICcnKTtcbn1cblxuQ2hhcnNldC5wcm90b3R5cGUuc2V0Y2FwaXRhbGl6YXRpb24gPSBmdW5jdGlvbihjYXBpdGFsaXphdGlvbikge1xuICBpZiAoY2FwaXRhbGl6YXRpb24gPT09ICd1cHBlcmNhc2UnKSB7XG4gICAgdGhpcy5jaGFycyA9IHRoaXMuY2hhcnMudG9VcHBlckNhc2UoKTtcbiAgfVxuICBlbHNlIGlmIChjYXBpdGFsaXphdGlvbiA9PT0gJ2xvd2VyY2FzZScpIHtcbiAgICB0aGlzLmNoYXJzID0gdGhpcy5jaGFycy50b0xvd2VyQ2FzZSgpO1xuICB9XG59XG5cbkNoYXJzZXQucHJvdG90eXBlLnJlbW92ZUR1cGxpY2F0ZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGNoYXJNYXAgPSB0aGlzLmNoYXJzLnNwbGl0KCcnKTtcbiAgY2hhck1hcCA9IFsuLi5uZXcgU2V0KGNoYXJNYXApXTtcbiAgdGhpcy5jaGFycyA9IGNoYXJNYXAuam9pbignJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IENoYXJzZXQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHJhbmRvbUJ5dGVzID0gcmVxdWlyZSgncmFuZG9tYnl0ZXMnKTtcbnZhciBDaGFyc2V0ID0gcmVxdWlyZSgnLi9jaGFyc2V0LmpzJyk7XG5cblxuZnVuY3Rpb24gdW5zYWZlUmFuZG9tQnl0ZXMobGVuZ3RoKSB7XG4gIHZhciBzdGFjayA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgc3RhY2sucHVzaChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyNTUpKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbGVuZ3RoLFxuICAgIHJlYWRVSW50ODogZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICByZXR1cm4gc3RhY2tbaW5kZXhdO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gc2FmZVJhbmRvbUJ5dGVzKGxlbmd0aCkge1xuICB0cnkge1xuICAgIHJldHVybiByYW5kb21CeXRlcyhsZW5ndGgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLyogUmVhY3QvUmVhY3QgTmF0aXZlIEZpeCArIEV0ZXJuYWwgbG9vcCByZW1vdmVkICovXG4gICAgcmV0dXJuIHVuc2FmZVJhbmRvbUJ5dGVzKGxlbmd0aCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1N0cmluZyhidWYsIGluaXRpYWxTdHJpbmcsIGNoYXJzLCByZXFMZW4sIG1heEJ5dGUpIHtcbiAgdmFyIHN0cmluZyA9IGluaXRpYWxTdHJpbmc7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmLmxlbmd0aCAmJiBzdHJpbmcubGVuZ3RoIDwgcmVxTGVuOyBpKyspIHtcbiAgICB2YXIgcmFuZG9tQnl0ZSA9IGJ1Zi5yZWFkVUludDgoaSk7XG4gICAgaWYgKHJhbmRvbUJ5dGUgPCBtYXhCeXRlKSB7XG4gICAgICBzdHJpbmcgKz0gY2hhcnMuY2hhckF0KHJhbmRvbUJ5dGUgJSBjaGFycy5sZW5ndGgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBnZXRBc3luY1N0cmluZyhzdHJpbmcsIGNoYXJzLCBsZW5ndGgsIG1heEJ5dGUsIGNiKSB7XG4gIHJhbmRvbUJ5dGVzKGxlbmd0aCwgZnVuY3Rpb24oZXJyLCBidWYpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICAvLyBTaW5jZSBpdCBpcyB3YWl0aW5nIGZvciBlbnRyb3B5LCBlcnJvcnMgYXJlIGxlZ2l0IGFuZCB3ZSBzaG91bGRuJ3QganVzdCBrZWVwIHJldHJ5aW5nXG4gICAgICBjYihlcnIpO1xuICAgIH1cbiAgICB2YXIgZ2VuZXJhdGVkU3RyaW5nID0gcHJvY2Vzc1N0cmluZyhidWYsIHN0cmluZywgY2hhcnMsIGxlbmd0aCwgbWF4Qnl0ZSk7XG4gICAgaWYgKGdlbmVyYXRlZFN0cmluZy5sZW5ndGggPCBsZW5ndGgpIHtcbiAgICAgIGdldEFzeW5jU3RyaW5nKGdlbmVyYXRlZFN0cmluZywgY2hhcnMsIGxlbmd0aCwgbWF4Qnl0ZSwgY2IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYihudWxsLCBnZW5lcmF0ZWRTdHJpbmcpO1xuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0cy5nZW5lcmF0ZSA9IGZ1bmN0aW9uKG9wdGlvbnMsIGNiKSB7XG4gIHZhciBjaGFyc2V0ID0gbmV3IENoYXJzZXQoKTtcblxuICB2YXIgbGVuZ3RoLCBjaGFycywgY2FwaXRhbGl6YXRpb24sIHN0cmluZyA9ICcnO1xuXG4gIC8vIEhhbmRsZSBvcHRpb25zXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcpIHtcbiAgICBsZW5ndGggPSB0eXBlb2Ygb3B0aW9ucy5sZW5ndGggPT09ICdudW1iZXInID8gb3B0aW9ucy5sZW5ndGggOiAzMjtcblxuICAgIGlmIChvcHRpb25zLmNoYXJzZXQpIHtcbiAgICAgIGNoYXJzZXQuc2V0VHlwZShvcHRpb25zLmNoYXJzZXQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNoYXJzZXQuc2V0VHlwZSgnYWxwaGFudW1lcmljJyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuY2FwaXRhbGl6YXRpb24pIHtcbiAgICAgIGNoYXJzZXQuc2V0Y2FwaXRhbGl6YXRpb24ob3B0aW9ucy5jYXBpdGFsaXphdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucmVhZGFibGUpIHtcbiAgICAgIGNoYXJzZXQucmVtb3ZlVW5yZWFkYWJsZSgpO1xuICAgIH1cblxuICAgIGNoYXJzZXQucmVtb3ZlRHVwbGljYXRlcygpO1xuICB9XG4gIGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnbnVtYmVyJykge1xuICAgIGxlbmd0aCA9IG9wdGlvbnM7XG4gICAgY2hhcnNldC5zZXRUeXBlKCdhbHBoYW51bWVyaWMnKTtcbiAgfVxuICBlbHNlIHtcbiAgICBsZW5ndGggPSAzMjtcbiAgICBjaGFyc2V0LnNldFR5cGUoJ2FscGhhbnVtZXJpYycpO1xuICB9XG5cbiAgLy8gR2VuZXJhdGUgdGhlIHN0cmluZ1xuICB2YXIgY2hhcnNMZW4gPSBjaGFyc2V0LmNoYXJzLmxlbmd0aDtcbiAgdmFyIG1heEJ5dGUgPSAyNTYgLSAoMjU2ICUgY2hhcnNMZW4pO1xuXG4gIGlmICghY2IpIHtcbiAgICB3aGlsZSAoc3RyaW5nLmxlbmd0aCA8IGxlbmd0aCkge1xuICAgICAgdmFyIGJ1ZiA9IHNhZmVSYW5kb21CeXRlcyhNYXRoLmNlaWwobGVuZ3RoICogMjU2IC8gbWF4Qnl0ZSkpO1xuICAgICAgc3RyaW5nID0gcHJvY2Vzc1N0cmluZyhidWYsIHN0cmluZywgY2hhcnNldC5jaGFycywgbGVuZ3RoLCBtYXhCeXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgZ2V0QXN5bmNTdHJpbmcoc3RyaW5nLCBjaGFyc2V0LmNoYXJzLCBsZW5ndGgsIG1heEJ5dGUsIGNiKTtcblxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4vbGliL3JhbmRvbXN0cmluZ1wiKTsiLCJpbXBvcnQgJ3JlZmxlY3QtbWV0YWRhdGEnXG5pbXBvcnQgc29ydEFycmF5IGZyb20gJ3NvcnQtYXJyYXknXG5pbXBvcnQge0lTb3J0QXJyYXlPcHRpb25zfSBmcm9tICcuL2ludGVyZmFjZXMvSVNvcnRBcnJheU9wdGlvbnMuanMnXG5pbXBvcnQgc29ydEtleXMgZnJvbSAnc29ydC1rZXlzJ1xuaW1wb3J0IHtJU29ydE9iamVjdE9wdGlvbnN9IGZyb20gJy4vaW50ZXJmYWNlcy9JU29ydE9iamVjdE9wdGlvbnMuanMnXG5pbXBvcnQgaXNHbG9iIGZyb20gJ2lzLWdsb2InXG5pbXBvcnQgKiBhcyByYW5kb21TdHJpbmcgZnJvbSAncmFuZG9tc3RyaW5nJ1xuaW1wb3J0IHtJQ29uc3RydWN0b3J9IGZyb20gJy4vaW50ZXJmYWNlcy9JQ29uc3RydWN0b3IuanMnXG5pbXBvcnQge0Jhc2VPYmplY3R9IGZyb20gJy4vbGliL2Jhc2UvQmFzZU9iamVjdC5qcydcbmltcG9ydCB7T0JKRUNUX0lOSVRfTUFSS30gZnJvbSAnLi9jb25zdGFudHMvTWV0YWRhdGFLZXkuanMnXG5pbXBvcnQge3NldFRpbWVvdXR9IGZyb20gJ3RpbWVycy9wcm9taXNlcydcbmltcG9ydCB7aXNQcm9taXNlIGFzIGlzQnVpbHRpblByb21pc2VzfSBmcm9tICd1dGlsL3R5cGVzJ1xuaW1wb3J0IHtSZWFkYWJsZSBhcyBSZWFkYWJsZVN0cmVhbSwgUmVhZGFibGVPcHRpb25zLCBTdHJlYW19IGZyb20gJ3N0cmVhbSdcbmltcG9ydCB7UGF0aExpa2V9IGZyb20gJ2ZzJ1xuXG4vKipcbiAqIOWIpOaWreS4pOS4quS8oOWFpeeahOWAvOaYr+WQpuebuOetiVxuICogQHBhcmFtIHZhbDFcbiAqIEBwYXJhbSB2YWwyXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIElzRXF1YWwodmFsMTogYW55LCB2YWwyOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBjb21wYXJlU2V0OiBTZXQ8YW55PiA9IG5ldyBTZXQoKVxuICAgIGNvbXBhcmVTZXQuYWRkKHZhbDEpLmFkZCh2YWwyKVxuICAgIHJldHVybiBjb21wYXJlU2V0LnNpemUgPT09IDJcbn1cblxuLyoqXG4gKiDliKTmlq3ovpPlhaXnmoTlhoXlrrnmmK/lkKbkuLrot6/lvoRcbiAqIEBwYXJhbSBpbnBcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gSXNQYXRoKGlucDogc3RyaW5nIHwgUGF0aExpa2UpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXRoUmVnZXg6IFJlZ0V4cCA9IG5ldyBSZWdFeHAoJ14oXFxcXC98XFxcXC5cXFxcLj9cXFxcL3woW0EtWmEtel06KT9cXFxcXFxcXCkoW15cXFxcXFxcXFxcXFwvOio/XCI8PnxcXFxcclxcXFxuXStbXFxcXFxcXFxcXFxcL10pKlteXFxcXFxcXFxcXFxcLzoqP1wiPD58XFxcXHJcXFxcbl0qJCcpXG4gICAgICAgIHJldHVybiBwYXRoUmVnZXgudGVzdChBczxzdHJpbmc+KGlucCkpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG59XG5cbi8qKlxuICog5bCG6L6T5YWl5a+56LGh6L2s5o2i5Li655Sf5oiQ5Zmo5a+56LGhXG4gKiBAcGFyYW0gaW5wXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiBDb252ZXJ0VG9JdGVyYWJsZShpbnA6IHN0cmluZyB8IEJ1ZmZlciB8IE5vZGVKUy5UeXBlZEFycmF5KTogR2VuZXJhdG9yIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucC5sZW5ndGg7IGkrKykgeWllbGQgaW5wW2ldXG59XG5cbi8qKlxuICog6L2s5o2iQnVmZmVy5Li65Y+v6K+75rWBXG4gKiBAcGFyYW0gaW5wXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDb252ZXJ0VG9TdHJlYW0oaW5wOiBCdWZmZXIsIG9wdGlvbnM/OiBSZWFkYWJsZU9wdGlvbnMpOiBSZWFkYWJsZVN0cmVhbVxuLyoqXG4gKiDovazmjaJUeXBlZEFycmF55Li65Y+v6K+75rWBXG4gKiBAcGFyYW0gaW5wXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDb252ZXJ0VG9TdHJlYW0oaW5wOiBOb2RlSlMuVHlwZWRBcnJheSwgb3B0aW9ucz86IFJlYWRhYmxlT3B0aW9ucyk6IFJlYWRhYmxlU3RyZWFtXG4vKipcbiAqIOi9rOaNouWtl+espuS4suS4uuWPr+ivu+a1gVxuICogQHBhcmFtIGlucFxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gQ29udmVydFRvU3RyZWFtKGlucDogc3RyaW5nLCBvcHRpb25zPzogUmVhZGFibGVPcHRpb25zKTogUmVhZGFibGVTdHJlYW1cbmV4cG9ydCBmdW5jdGlvbiBDb252ZXJ0VG9TdHJlYW0oaW5wOiBhbnksIG9wdGlvbnM/OiBSZWFkYWJsZU9wdGlvbnMpOiBSZWFkYWJsZVN0cmVhbSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgPyBvcHRpb25zIDoge31cbiAgICByZXR1cm4gU3RyZWFtLlJlYWRhYmxlLmZyb20oQ29udmVydFRvSXRlcmFibGUoaW5wKSwgb3B0aW9ucylcbn1cblxuLyoqXG4gKiDliKTmlq3kuIDkuKrnm67moIflr7nosaHmmK/lkKbkuLpQcm9taXNlXG4gKiBAcGFyYW0gb2JqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb21pc2UodGFyZ2V0OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNCdWlsdGluUHJvbWlzZXModGFyZ2V0KSA/IHRydWUgOiAhIXRhcmdldCAmJiAodHlwZW9mIHRhcmdldCA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHRhcmdldCA9PT0gJ2Z1bmN0aW9uJykgJiYgdHlwZW9mIHRhcmdldC50aGVuID09PSAnZnVuY3Rpb24nXG59XG5cbi8qKlxuICog5byC5q2l562J5b6FXG4gKiBAcGFyYW0gbXNcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gRGVsYXkobXM6IG51bWJlciA9IDEwMDApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgc2V0VGltZW91dChtcylcbn1cblxuLyoqXG4gKiDkvKDpgJLov5vmnaXnmoTlj4LmlbDkuI3kvJrmnInku7vkvZXkvZznlKhcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gVGhyb3dJbnRvQmxhY2tIb2xlKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgLyoqXG4gICAgICog5LuF5o6l5Y+X5Y+C5pWw77yM5L2G5LiN5a+55Y+C5pWw5YGa5Lu75L2V5aSE55CGXG4gICAgICovXG59XG5cbi8qKlxuICog5a+56LGh5piv5ZCm5bey6KKr5Yid5aeL5YyWXG4gKiBAcGFyYW0gb2JqXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIElzT2JqZWN0SW5pdGlhbGl6ZWQ8VCBleHRlbmRzIEJhc2VPYmplY3Q+KG9iajogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIVJlZmxlY3QuZ2V0T3duTWV0YWRhdGEoT0JKRUNUX0lOSVRfTUFSSywgb2JqKVxufVxuXG4vKipcbiAqIOWQiOW5tuS4pOS4qlNldFxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0gczFcbiAqIEBwYXJhbSBzMlxuICovXG5leHBvcnQgZnVuY3Rpb24gTWVyZ2VTZXQ8VCA9IGFueSwgVSA9IGFueT4oczE6IFNldDxUPiwgczI6IFNldDxVPik6IFNldDxUIHwgVT4ge1xuICAgIHJldHVybiBuZXcgU2V0PFQgfCBVPihbLi4uczEsIC4uLnMyXSlcbn1cblxuLyoqXG4gKiDlkIjlubbkuKTkuKrmlbDnu4RcbiAqIEBwYXJhbSBhcnIxXG4gKiBAcGFyYW0gYXJyMlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBNZXJnZUFycmF5PFQgPSBhbnksIFUgPSBhbnk+KGFycjE6IFRbXSwgYXJyMjogVVtdKTogKFQgfCBVKVtdIHtcbiAgICByZXR1cm4gWy4uLmFycjEsIC4uLmFycjJdXG59XG5cbi8qKlxuICog5ZCI5bm25Lik5LiqTWFwXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSBtMVxuICogQHBhcmFtIG0yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBNZXJnZU1hcDxLMSwgVjEsIEsyLCBWMj4obTE6IE1hcDxLMSwgVjE+LCBtMjogTWFwPEsyLCBWMj4pOiBNYXA8SzEgfCBLMiwgVjEgfCBWMj4ge1xuICAgIHJldHVybiBuZXcgTWFwPEsxIHwgSzIsIFYxIHwgVjI+KFsuLi5tMSwgLi4ubTJdKVxufVxuXG4vKipcbiAqIOmbhuWQiOi9rOaVsOe7hFxuICogQHBhcmFtIHNldFxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTZXRUb0FycmF5PFQgPSBhbnk+KHNldDogU2V0PFQ+KTogVFtdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShzZXQpXG59XG5cbi8qKlxuICog5pWw57uE6L2s6ZuG5ZCIXG4gKiBAcGFyYW0gYXJyXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEFycmF5VG9TZXQ8VCA9IGFueT4oYXJyOiBUW10pOiBTZXQ8VD4ge1xuICAgIHJldHVybiBuZXcgU2V0KGFycilcbn1cblxuLyoqXG4gKiDmlbDnu4Tljrvph41cbiAqIEBwYXJhbSBhcnJcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gVW5pcXVlQXJyYXk8VD4oYXJyOiBUW10pOiBUW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoYXJyKSlcbn1cblxuLyoqXG4gKiDmlbDnu4TmjpLluo9cbiAqIEBwYXJhbSBhcnJcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFNvcnRBcnJheTxUID0gYW55PihhcnI6IFRbXSwgLi4ub3B0aW9uczogSVNvcnRBcnJheU9wdGlvbnM8VD5bXSk6IFRbXSB7XG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoIDwgMikge1xuICAgICAgICBsZXQgc29ydE9wdGlvbnM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7b3JkZXI6ICdhc2MnfVxuICAgICAgICBpZiAob3B0aW9ucy5sZW5ndGgpIHNvcnRPcHRpb25zID0gT2JqZWN0LmFzc2lnbihzb3J0T3B0aW9ucywge1xuICAgICAgICAgICAgYnk6IG9wdGlvbnNbMF0uYnksXG4gICAgICAgICAgICBvcmRlcjogb3B0aW9uc1swXS5vcmRlcixcbiAgICAgICAgICAgIGNvbXB1dGVkOiBvcHRpb25zWzBdLmNvbXB1dGVkXG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiBzb3J0QXJyYXkoYXJyLCBzb3J0T3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzb3J0c09wdGlvbnM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7XG4gICAgICAgICAgICBieTogW10sXG4gICAgICAgICAgICBvcmRlcjogW10sXG4gICAgICAgICAgICBjdXN0b21PcmRlcnM6IHt9XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5mb3JFYWNoKChvcHQ6IElTb3J0QXJyYXlPcHRpb25zPFQ+KTogdm9pZCA9PiB7XG4gICAgICAgICAgICBpZiAob3B0LmJ5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQ6IHN0cmluZyA9IG9wdC5ieSBhcyBhbnlcbiAgICAgICAgICAgICAgICBzb3J0c09wdGlvbnMuYnkucHVzaChmaWVsZClcbiAgICAgICAgICAgICAgICBzb3J0c09wdGlvbnMub3JkZXIucHVzaChmaWVsZClcbiAgICAgICAgICAgICAgICBzb3J0c09wdGlvbnMuY3VzdG9tT3JkZXJzW2ZpZWxkXSA9IFNvcnRBcnJheShhcnIsIG9wdCkubWFwKHZhbHVlID0+IHZhbHVlW2ZpZWxkXSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIHNvcnRBcnJheShhcnIsIHNvcnRzT3B0aW9ucylcbiAgICB9XG59XG5cbi8qKlxuICog5a+56LGh5o6S5bqPXG4gKiBAcGFyYW0gb2JqZWN0XG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTb3J0T2JqZWN0PFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihvYmplY3Q6IFQsIG9wdGlvbnM/OiBJU29ydE9iamVjdE9wdGlvbnMpOiBUIHtcbiAgICByZXR1cm4gc29ydEtleXMob2JqZWN0LCB7XG4gICAgICAgIGRlZXA6IG9wdGlvbnM/LmRlZXAsIGNvbXBhcmU6IChhOiBzdHJpbmcsIGI6IHN0cmluZyk6IG51bWJlciA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbnM/Lm9yZGVyKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnYXNjJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubG9jYWxlQ29tcGFyZShiKVxuICAgICAgICAgICAgICAgIGNhc2UgJ2Rlc2MnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLWEubG9jYWxlQ29tcGFyZShiKVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmxvY2FsZUNvbXBhcmUoYilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pXG59XG5cbi8qKlxuICog6YWN572u5a+56LGh5bGe5oCnXG4gKiBAcGFyYW0gdGFyZ2V0XG4gKiBAcGFyYW0gcHJvcGVydGllc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDb25maWd1cmVPYmplY3RQcm9wZXJ0aWVzPFQgZXh0ZW5kcyBvYmplY3QgPSBvYmplY3Q+KHRhcmdldDogVCwgcHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55Pik6IHZvaWQge1xuICAgIE9iamVjdC5rZXlzKHByb3BlcnRpZXMgPyBwcm9wZXJ0aWVzIDoge30pLmZvckVhY2goKHByb3BlcnR5S2V5OiBzdHJpbmcpID0+IHRhcmdldFtwcm9wZXJ0eUtleV0gPSBwcm9wZXJ0aWVzIVtwcm9wZXJ0eUtleV0pXG59XG5cbi8qKlxuICog57G75Z6L6L2s5o2iXG4gKiBAcGFyYW0gaW5wXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEFzPFQgPSBhbnk+KGlucDogYW55KTogVCB7XG4gICAgcmV0dXJuIGlucCBhcyBUXG59XG5cbi8qKlxuICog5Yik5pat5piv5ZCm5Li66YCa6YWN56ym5Yy56YWN5pON5L2c56ym5a2X56ym5LiyXG4gKiBAcGFyYW0gaW5wXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBJc0dsb2JTdHJpbmcoaW5wOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNHbG9iKGlucClcbn1cblxuLyoqXG4gKiDnlJ/miJDpmo/mnLrlrZfnrKbkuLJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJhbmRvbVN0cmluZygpOiBzdHJpbmdcbi8qKlxuICog55Sf5oiQ5oyH5a6a6ZW/5bqm55qE6ZqP5py65a2X56ym5LiyXG4gKiBAcGFyYW0gbGVuZ3RoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSYW5kb21TdHJpbmcobGVuZ3RoOiBudW1iZXIpOiBzdHJpbmdcbi8qKlxuICog55Sf5oiQ5LuF5YyF5ZCr5a2X56ym6ZuG5YaF5a2X56ym55qE5oyH5a6a6ZW/5bqm5a2X56ym5LiyXG4gKiBAcGFyYW0gbGVuZ3RoXG4gKiBAcGFyYW0gY2hhcnNldFxuICovXG5leHBvcnQgZnVuY3Rpb24gUmFuZG9tU3RyaW5nKGxlbmd0aDogbnVtYmVyLCBjaGFyc2V0OiBzdHJpbmcpOiBzdHJpbmdcbi8qKlxuICog55Sf5oiQ5LuF5YyF5ZCrWzAtOSBhLXogQS1aXeeahOaMh+WumumVv+W6puWtl+espuS4slxuICogQHBhcmFtIGxlbmd0aFxuICogQHBhcmFtIGNoYXJzZXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJhbmRvbVN0cmluZyhsZW5ndGg6IG51bWJlciwgY2hhcnNldDogJ2FscGhhbnVtZXJpYycpOiBzdHJpbmdcbi8qKlxuICog55Sf5oiQ5LuF5YyF5ZCrW2EteiBBLVpd55qE5oyH5a6a6ZW/5bqm5a2X56ym5LiyXG4gKiBAcGFyYW0gbGVuZ3RoXG4gKiBAcGFyYW0gY2hhcnNldFxuICovXG5leHBvcnQgZnVuY3Rpb24gUmFuZG9tU3RyaW5nKGxlbmd0aDogbnVtYmVyLCBjaGFyc2V0OiAnYWxwaGFiZXRpYycpOiBzdHJpbmdcbi8qKlxuICog55Sf5oiQ5LuF5YyF5ZCrWzAtOV3nmoTmjIflrprplb/luqblrZfnrKbkuLJcbiAqIEBwYXJhbSBsZW5ndGhcbiAqIEBwYXJhbSBjaGFyc2V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSYW5kb21TdHJpbmcobGVuZ3RoOiBudW1iZXIsIGNoYXJzZXQ6ICdudW1lcmljJyk6IHN0cmluZ1xuLyoqXG4gKiDnlJ/miJDku4XljIXlkKtbMC05IGEtZl3nmoTmjIflrprplb/luqblrZfnrKbkuLJcbiAqIEBwYXJhbSBsZW5ndGhcbiAqIEBwYXJhbSBjaGFyc2V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSYW5kb21TdHJpbmcobGVuZ3RoOiBudW1iZXIsIGNoYXJzZXQ6ICdoZXgnKTogc3RyaW5nXG4vKipcbiAqIOeUn+aIkOS7heWMheWQq1swMV3nmoTmjIflrprplb/luqblrZfnrKbkuLJcbiAqIEBwYXJhbSBsZW5ndGhcbiAqIEBwYXJhbSBjaGFyc2V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSYW5kb21TdHJpbmcobGVuZ3RoOiBudW1iZXIsIGNoYXJzZXQ6ICdiaW5hcnknKTogc3RyaW5nXG4vKipcbiAqIOeUn+aIkOS7heWMheWQq1swLTdd55qE5oyH5a6a6ZW/5bqm5a2X56ym5LiyXG4gKiBAcGFyYW0gbGVuZ3RoXG4gKiBAcGFyYW0gY2hhcnNldFxuICovXG5leHBvcnQgZnVuY3Rpb24gUmFuZG9tU3RyaW5nKGxlbmd0aDogbnVtYmVyLCBjaGFyc2V0OiAnb2N0YWwnKTogc3RyaW5nXG4vKipcbiAqIOeUn+aIkOS7heWMheWQq+Wtl+espumbhuaVsOe7hOWGheWtl+espuinhOWImeeahOaMh+WumumVv+W6puWtl+espuS4slxuICogQHBhcmFtIGxlbmd0aFxuICogQHBhcmFtIGNoYXJzZXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJhbmRvbVN0cmluZyhsZW5ndGg6IG51bWJlciwgY2hhcnNldDogKCdhbHBoYW51bWVyaWMnIHwgJ2FscGhhYmV0aWMnIHwgJ251bWVyaWMnIHwgJ2hleCcgfCAnYmluYXJ5JyB8ICdvY3RhbCcgfCBzdHJpbmcpW10pOiBzdHJpbmdcbmV4cG9ydCBmdW5jdGlvbiBSYW5kb21TdHJpbmcobGVuZ3RoPzogbnVtYmVyLCBjaGFyc2V0Pzogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIHJldHVybiByYW5kb21TdHJpbmcuZ2VuZXJhdGUoe1xuICAgICAgICBsZW5ndGg6IGxlbmd0aCAhPT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogMzIsXG4gICAgICAgIGNoYXJzZXQ6IEFzPHN0cmluZz4oY2hhcnNldCAhPT0gdW5kZWZpbmVkID8gY2hhcnNldCA6ICdhbHBoYW51bWVyaWMnKVxuICAgIH0pXG59XG5cbi8qKlxuICog55Sf5oiQMzLkvY3nmoTpmo/mnLrlrZfnrKbkuLJcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gTm9uY2VTdHIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gUmFuZG9tU3RyaW5nKDMyLCAnYWxwaGFudW1lcmljJylcbn1cblxuLyoqXG4gKiDojrflj5bnsbvlrp7kvosv5p6E6YCg5Ye95pWw5omA57un5om/55qE54i257G755qE5p6E6YCg5Ye95pWwXG4gKiBAcGFyYW0gdGFyZ2V0XG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFBhcmVudENvbnN0cnVjdG9yPFQgZXh0ZW5kcyBGdW5jdGlvbiA9IGFueT4odGFyZ2V0OiBUKTogSUNvbnN0cnVjdG9yPGFueT4gfCBudWxsXG5leHBvcnQgZnVuY3Rpb24gUGFyZW50Q29uc3RydWN0b3I8VCBleHRlbmRzIEZ1bmN0aW9uID0gYW55Pih0YXJnZXQ6IElDb25zdHJ1Y3RvcjxUPik6IElDb25zdHJ1Y3Rvcjxhbnk+IHwgbnVsbCB7XG4gICAgY29uc3Qgcm9vdFByb3RvOiB1bmtub3duID0gU3ltYm9sLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5fX3Byb3RvX19cbiAgICBjb25zdCBjb25zdHJ1Y3RvcjogRnVuY3Rpb24gPSAoISF0YXJnZXRbU3ltYm9sLmhhc0luc3RhbmNlXSAmJiB0YXJnZXQucHJvdG90eXBlKSA/IHRhcmdldCA6IHRhcmdldC5jb25zdHJ1Y3RvclxuICAgIGNvbnN0IHByb3RvOiBJQ29uc3RydWN0b3I8YW55PiA9IGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5fX3Byb3RvX19cbiAgICByZXR1cm4gcHJvdG8gPT09IHJvb3RQcm90byA/IG51bGwgOiBwcm90b1xufVxuIiwiaW1wb3J0IGFycmF5aWZ5IGZyb20gJ2FycmF5LWJhY2svaW5kZXgubWpzJ1xuaW1wb3J0IHQgZnJvbSAndHlwaWNhbC9pbmRleC5tanMnXG5cbi8qKlxuICogSXNvbW9ycGhpYywgbG9hZC1hbnl3aGVyZSBmdW5jdGlvbiB0byBzb3J0IGFuIGFycmF5IGJ5IHNjYWxhciwgZGVlcCBvciBjb21wdXRlZCB2YWx1ZXMgaW4gYW55IHN0YW5kYXJkIG9yIGN1c3RvbSBvcmRlci5cbiAqXG4gKiBAbW9kdWxlIHNvcnQtYXJyYXlcbiAqIEB0eXBpY2FsbmFtZSBzb3J0QXJyYXlcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBzb3J0QXJyYXkgPSByZXF1aXJlKCdzb3J0LWFycmF5JylcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IC0gVGhlIGlucHV0IGFycmF5IHRvIHNvcnQuIEl0IGlzIHNvcnRlZCBpbiBwbGFjZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBTb3J0IG9wdGlvbnMuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBbb3B0aW9ucy5ieV0gLSBPbmUgb3IgbW9yZSBwcm9wZXJ0eSBuYW1lcyBvciBjb21wdXRlZCBmaWVsZHMgdG8gc29ydCBieS4gU3BlY2lmeWluZyBwcm9wZXJ0eSBuYW1lcyBpcyBvbmx5IHJlbGV2YW50IHdoZW4gc29ydGluZyBhbiBhcnJheSBvZiBvYmplY3RzLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gW29wdGlvbnMub3JkZXJdIC0gT25lIG9yIG1vcmUgc29ydCBvcmRlcnMuIFNwZWNpZnkgYCdhc2MnYCwgYCdkZXNjJ2Agb3IgYSBwcm9wZXJ0eSBuYW1lIGZyb20gdGhlIGBvcHRpb25zLmN1c3RvbU9yZGVyc2Agb2JqZWN0LlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zLmN1c3RvbU9yZGVyc10gLSBBIGRpY3Rpb25hcnkgb2JqZWN0IGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgY3VzdG9tIG9yZGVycy4gRWFjaCBjdXN0b20gb3JkZXIgdmFsdWUgbXVzdCBiZSBhbiBhcnJheSBkZWZpbmluZyB0aGUgb3JkZXIgZXhwZWN0ZWQgdmFsdWVzIG11c3QgYmUgc29ydGVkIGluLlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zLmNvbXB1dGVkXSAtIEEgZGljdGlvbmFyeSBvYmplY3QgY29udGFpbmluZyBvbmUgb3IgbW9yZSBjb21wdXRlZCBmaWVsZCBmdW5jdGlvbnMuIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgb25jZSBwZXIgaXRlbSBpbiB0aGUgYXJyYXkuIEVhY2ggaW52b2NhdGlvbiB3aWxsIHJlY2VpdmUgdGhlIGFycmF5IGl0ZW0gYXMgaW5wdXQgYW5kIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlIGJ5IHdoaWNoIHRoZSBhcnJheSBjYW4gYmUgc29ydGVkLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm51bGxSYW5rXSAtIENvbmZpZ3VyZXMgd2hldGhlciBgbnVsbGAgdmFsdWVzIHdpbGwgYmUgc29ydGVkIGJlZm9yZSBvciBhZnRlciBkZWZpbmVkIHZhbHVlcy4gU2V0IHRvIGAtMWAgZm9yIGJlZm9yZSwgYDFgIGZvciBhZnRlci4gRGVmYXVsdHMgdG8gYDFgLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnVuZGVmaW5lZFJhbmtdIC0gQ29uZmlndXJlcyB3aGV0aGVyIGB1bmRlZmluZWRgIHZhbHVlcyB3aWxsIGJlIHNvcnRlZCBiZWZvcmUgb3IgYWZ0ZXIgZGVmaW5lZCB2YWx1ZXMuIFNldCB0byBgLTFgIGZvciBiZWZvcmUsIGAxYCBmb3IgYWZ0ZXIuIERlZmF1bHRzIHRvIGAxYC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgdGhhdCB3YXMgcGFzc2VkIGluLlxuICogQGFsaWFzIG1vZHVsZTpzb3J0LWFycmF5XG4gKi9cbmZ1bmN0aW9uIHNvcnRBcnJheSAoYXJyLCBvcHRpb25zID0ge30pIHtcbiAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oXG4gICAge1xuICAgICAgY29tcHV0ZWQ6IHt9LFxuICAgICAgY3VzdG9tT3JkZXJzOiB7fSxcbiAgICAgIG51bGxSYW5rOiAxLFxuICAgICAgdW5kZWZpbmVkUmFuazogMVxuICAgIH0sXG4gICAgb3B0aW9uc1xuICApXG4gIGFyci5zb3J0KGdldENvbXBhcmVGdW5jKG9wdGlvbnMpKVxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIGdldENvbXBhcmVGdW5jIChvcHRpb25zID0ge30pIHtcbiAgY29uc3QgYnkgPSBhcnJheWlmeShvcHRpb25zLmJ5KVxuICBjb25zdCBvcmRlciA9IGFycmF5aWZ5KG9wdGlvbnMub3JkZXIpXG4gIGNvbnN0IHsgY3VzdG9tT3JkZXJzLCBjb21wdXRlZCB9ID0gb3B0aW9uc1xuICByZXR1cm4gZnVuY3Rpb24gY29tcGFyZUZ1bmMgKHhJbiwgeUluLCBieUluZGV4ID0gMCkge1xuICAgIGNvbnN0IGN1cnJPcmRlciA9IG9yZGVyW2J5SW5kZXhdIHx8ICdhc2MnXG4gICAgaWYgKCEoY3Vyck9yZGVyID09PSAnYXNjJyB8fCBjdXJyT3JkZXIgPT09ICdkZXNjJyB8fCBjdXN0b21PcmRlcnNbY3Vyck9yZGVyXSkpIHtcbiAgICAgIHJldHVybiAwXG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdCwgeCwgeVxuICAgIGlmIChieS5sZW5ndGgpIHtcbiAgICAgIHggPSB0LmlzRGVmaW5lZCh4SW5bYnlbYnlJbmRleF1dKVxuICAgICAgICA/IHhJbltieVtieUluZGV4XV1cbiAgICAgICAgOiBjb21wdXRlZFtieVtieUluZGV4XV0gJiYgY29tcHV0ZWRbYnlbYnlJbmRleF1dKHhJbilcbiAgICAgIHkgPSB0LmlzRGVmaW5lZCh5SW5bYnlbYnlJbmRleF1dKVxuICAgICAgICA/IHlJbltieVtieUluZGV4XV1cbiAgICAgICAgOiBjb21wdXRlZFtieVtieUluZGV4XV0gJiYgY29tcHV0ZWRbYnlbYnlJbmRleF1dKHlJbilcbiAgICB9IGVsc2Uge1xuICAgICAgeCA9IHhJblxuICAgICAgeSA9IHlJblxuICAgIH1cblxuICAgIGlmIChjdXN0b21PcmRlcnMgJiYgY3VzdG9tT3JkZXJzW2N1cnJPcmRlcl0pIHtcbiAgICAgIHJlc3VsdCA9IGN1c3RvbU9yZGVyc1tjdXJyT3JkZXJdLmluZGV4T2YoeCkgLSBjdXN0b21PcmRlcnNbY3Vyck9yZGVyXS5pbmRleE9mKHkpXG4gICAgfSBlbHNlIGlmICh4ID09PSB5KSB7XG4gICAgICByZXN1bHQgPSAwXG4gICAgfSBlbHNlIGlmICh0LmlzTnVsbCh4KSAmJiB0LmlzVW5kZWZpbmVkKHkpKSB7XG4gICAgICByZXN1bHQgPSBjdXJyT3JkZXIgPT09ICdhc2MnXG4gICAgICAgID8gMVxuICAgICAgICA6IGN1cnJPcmRlciA9PT0gJ2Rlc2MnXG4gICAgICAgICAgPyAtMVxuICAgICAgICAgIDogMFxuICAgIH0gZWxzZSBpZiAodC5pc1VuZGVmaW5lZCh4KSAmJiB0LmlzTnVsbCh5KSkge1xuICAgICAgcmVzdWx0ID0gY3Vyck9yZGVyID09PSAnYXNjJ1xuICAgICAgICA/IC0xXG4gICAgICAgIDogY3Vyck9yZGVyID09PSAnZGVzYydcbiAgICAgICAgICA/IDFcbiAgICAgICAgICA6IDBcbiAgICB9IGVsc2UgaWYgKHQuaXNOdWxsKHgpICYmIHQuaXNEZWZpbmVkVmFsdWUoeSkpIHtcbiAgICAgIHJlc3VsdCA9IG9wdGlvbnMubnVsbFJhbmtcbiAgICB9IGVsc2UgaWYgKHQuaXNVbmRlZmluZWQoeCkgJiYgdC5pc0RlZmluZWRWYWx1ZSh5KSkge1xuICAgICAgcmVzdWx0ID0gb3B0aW9ucy51bmRlZmluZWRSYW5rXG4gICAgfSBlbHNlIGlmICh0LmlzTnVsbCh5KSAmJiB0LmlzRGVmaW5lZFZhbHVlKHgpKSB7XG4gICAgICByZXN1bHQgPSAtb3B0aW9ucy5udWxsUmFua1xuICAgIH0gZWxzZSBpZiAodC5pc1VuZGVmaW5lZCh5KSAmJiB0LmlzRGVmaW5lZFZhbHVlKHgpKSB7XG4gICAgICByZXN1bHQgPSAtb3B0aW9ucy51bmRlZmluZWRSYW5rXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IHggPCB5ID8gLTEgOiB4ID4geSA/IDEgOiAwXG4gICAgICBpZiAoY3Vyck9yZGVyID09PSAnZGVzYycpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogLTFcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlc3VsdCA9PT0gMCAmJiB0LmlzRGVmaW5lZChieVtieUluZGV4ICsgMV0pKSB7XG4gICAgICByZXN1bHQgPSBjb21wYXJlRnVuYyh4SW4sIHlJbiwgYnlJbmRleCArIDEpXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBzb3J0QXJyYXlcbiIsIi8qKlxuICogVGFrZXMgYW55IGlucHV0IGFuZCBndWFyYW50ZWVzIGFuIGFycmF5IGJhY2suXG4gKlxuICogLSBDb252ZXJ0cyBhcnJheS1saWtlIG9iamVjdHMgKGUuZy4gYGFyZ3VtZW50c2AsIGBTZXRgKSB0byBhIHJlYWwgYXJyYXkuXG4gKiAtIENvbnZlcnRzIGB1bmRlZmluZWRgIHRvIGFuIGVtcHR5IGFycmF5LlxuICogLSBDb252ZXJ0cyBhbnkgYW5vdGhlciBvdGhlciwgc2luZ3VsYXIgdmFsdWUgKGluY2x1ZGluZyBgbnVsbGAsIG9iamVjdHMgYW5kIGl0ZXJhYmxlcyBvdGhlciB0aGFuIGBTZXRgKSBpbnRvIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhhdCB2YWx1ZS5cbiAqIC0gSWdub3JlcyBpbnB1dCB3aGljaCBpcyBhbHJlYWR5IGFuIGFycmF5LlxuICpcbiAqIEBtb2R1bGUgYXJyYXktYmFja1xuICogQGV4YW1wbGVcbiAqID4gY29uc3QgYXJyYXlpZnkgPSByZXF1aXJlKCdhcnJheS1iYWNrJylcbiAqXG4gKiA+IGFycmF5aWZ5KHVuZGVmaW5lZClcbiAqIFtdXG4gKlxuICogPiBhcnJheWlmeShudWxsKVxuICogWyBudWxsIF1cbiAqXG4gKiA+IGFycmF5aWZ5KDApXG4gKiBbIDAgXVxuICpcbiAqID4gYXJyYXlpZnkoWyAxLCAyIF0pXG4gKiBbIDEsIDIgXVxuICpcbiAqID4gYXJyYXlpZnkobmV3IFNldChbIDEsIDIgXSkpXG4gKiBbIDEsIDIgXVxuICpcbiAqID4gZnVuY3Rpb24gZigpeyByZXR1cm4gYXJyYXlpZnkoYXJndW1lbnRzKTsgfVxuICogPiBmKDEsMiwzKVxuICogWyAxLCAyLCAzIF1cbiAqL1xuXG5mdW5jdGlvbiBpc09iamVjdCAoaW5wdXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgaW5wdXQgIT09IG51bGxcbn1cblxuZnVuY3Rpb24gaXNBcnJheUxpa2UgKGlucHV0KSB7XG4gIHJldHVybiBpc09iamVjdChpbnB1dCkgJiYgdHlwZW9mIGlucHV0Lmxlbmd0aCA9PT0gJ251bWJlcidcbn1cblxuLyoqXG4gKiBAcGFyYW0geyp9IC0gVGhlIGlucHV0IHZhbHVlIHRvIGNvbnZlcnQgdG8gYW4gYXJyYXlcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqIEBhbGlhcyBtb2R1bGU6YXJyYXktYmFja1xuICovXG5mdW5jdGlvbiBhcnJheWlmeSAoaW5wdXQpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgcmV0dXJuIGlucHV0XG4gIH0gZWxzZSBpZiAoaW5wdXQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBbXVxuICB9IGVsc2UgaWYgKGlzQXJyYXlMaWtlKGlucHV0KSB8fCBpbnB1dCBpbnN0YW5jZW9mIFNldCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKGlucHV0KVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBbaW5wdXRdXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlpZnlcbiIsIi8qKlxuICogSXNvbW9ycGhpYywgZnVuY3Rpb25hbCB0eXBlLWNoZWNraW5nIGZvciBKYXZhc2NyaXB0LlxuICogQG1vZHVsZSB0eXBpY2FsXG4gKiBAdHlwaWNhbG5hbWUgdFxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHQgPSByZXF1aXJlKCd0eXBpY2FsJylcbiAqIGNvbnN0IGFsbERlZmluZWQgPSBhcnJheS5ldmVyeSh0LmlzRGVmaW5lZClcbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBpbnB1dCBpcyBhIG51bWJlci4gSXQgaXMgYSBtb3JlIHJlYXNvbmFibGUgYWx0ZXJuYXRpdmUgdG8gYHR5cGVvZiBuYCB3aGljaCByZXR1cm5zIGBudW1iZXJgIGZvciBgTmFOYCBhbmQgYEluZmluaXR5YC5cbiAqXG4gKiBAcGFyYW0geyp9IC0gdGhlIGlucHV0IHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQHN0YXRpY1xuICogQGV4YW1wbGVcbiAqID4gdC5pc051bWJlcigwKVxuICogdHJ1ZVxuICogPiB0LmlzTnVtYmVyKDEpXG4gKiB0cnVlXG4gKiA+IHQuaXNOdW1iZXIoMS4xKVxuICogdHJ1ZVxuICogPiB0LmlzTnVtYmVyKDB4ZmYpXG4gKiB0cnVlXG4gKiA+IHQuaXNOdW1iZXIoMDY0NClcbiAqIHRydWVcbiAqID4gdC5pc051bWJlcig2LjJlNSlcbiAqIHRydWVcbiAqID4gdC5pc051bWJlcihOYU4pXG4gKiBmYWxzZVxuICogPiB0LmlzTnVtYmVyKEluZmluaXR5KVxuICogZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyIChuKSB7XG4gIHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdChuKSkgJiYgaXNGaW5pdGUobilcbn1cblxuLyoqXG4gKiBBIHBsYWluIG9iamVjdCBpcyBhIHNpbXBsZSBvYmplY3QgbGl0ZXJhbCwgaXQgaXMgbm90IGFuIGluc3RhbmNlIG9mIGEgY2xhc3MuIFJldHVybnMgdHJ1ZSBpZiB0aGUgaW5wdXQgYHR5cGVvZmAgaXMgYG9iamVjdGAgYW5kIGRpcmVjdGx5IGRlY2VuZHMgZnJvbSBgT2JqZWN0YC5cbiAqXG4gKiBAcGFyYW0geyp9IC0gdGhlIGlucHV0IHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQHN0YXRpY1xuICogQGV4YW1wbGVcbiAqID4gdC5pc1BsYWluT2JqZWN0KHsgc29tZXRoaW5nOiAnb25lJyB9KVxuICogdHJ1ZVxuICogPiB0LmlzUGxhaW5PYmplY3QobmV3IERhdGUoKSlcbiAqIGZhbHNlXG4gKiA+IHQuaXNQbGFpbk9iamVjdChbIDAsIDEgXSlcbiAqIGZhbHNlXG4gKiA+IHQuaXNQbGFpbk9iamVjdCgvdGVzdC8pXG4gKiBmYWxzZVxuICogPiB0LmlzUGxhaW5PYmplY3QoMSlcbiAqIGZhbHNlXG4gKiA+IHQuaXNQbGFpbk9iamVjdCgnb25lJylcbiAqIGZhbHNlXG4gKiA+IHQuaXNQbGFpbk9iamVjdChudWxsKVxuICogZmFsc2VcbiAqID4gdC5pc1BsYWluT2JqZWN0KChmdW5jdGlvbiAqICgpIHt9KSgpKVxuICogZmFsc2VcbiAqID4gdC5pc1BsYWluT2JqZWN0KGZ1bmN0aW9uICogKCkge30pXG4gKiBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQbGFpbk9iamVjdCAoaW5wdXQpIHtcbiAgcmV0dXJuIGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgaW5wdXQuY29uc3RydWN0b3IgPT09IE9iamVjdFxufVxuXG4vKipcbiAqIEFuIGFycmF5LWxpa2UgdmFsdWUgaGFzIGFsbCB0aGUgcHJvcGVydGllcyBvZiBhbiBhcnJheSB5ZXQgaXMgbm90IGFuIGFycmF5IGluc3RhbmNlLiBBbiBleGFtcGxlIGlzIHRoZSBgYXJndW1lbnRzYCBvYmplY3QuIFJldHVybnMgYHRydWVgYCBpZiB0aGUgaW5wdXQgdmFsdWUgaXMgYW4gb2JqZWN0LCBub3QgYG51bGxgYCBhbmQgaGFzIGEgYGxlbmd0aGAgcHJvcGVydHkgc2V0IHdpdGggYSBudW1lcmljIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7Kn0gLSB0aGUgaW5wdXQgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAc3RhdGljXG4gKiBAZXhhbXBsZVxuICogZnVuY3Rpb24gc3VtKHgsIHkpe1xuICogICBjb25zb2xlLmxvZyh0LmlzQXJyYXlMaWtlKGFyZ3VtZW50cykpXG4gKiAgIC8vIHByaW50cyBgdHJ1ZWBcbiAqIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXlMaWtlIChpbnB1dCkge1xuICByZXR1cm4gaXNPYmplY3QoaW5wdXQpICYmIHR5cGVvZiBpbnB1dC5sZW5ndGggPT09ICdudW1iZXInXG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSB0eXBlb2YgaW5wdXQgaXMgYCdvYmplY3QnYCBidXQgbm90IG51bGwuXG4gKiBAcGFyYW0geyp9IC0gdGhlIGlucHV0IHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQHN0YXRpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3QgKGlucHV0KSB7XG4gIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnICYmIGlucHV0ICE9PSBudWxsXG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBpbnB1dCB2YWx1ZSBpcyBkZWZpbmVkLlxuICogQHBhcmFtIHsqfSAtIHRoZSBpbnB1dCB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBzdGF0aWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5lZCAoaW5wdXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpbnB1dCAhPT0gJ3VuZGVmaW5lZCdcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGlucHV0IHZhbHVlIGlzIHVuZGVmaW5lZC5cbiAqIEBwYXJhbSB7Kn0gLSB0aGUgaW5wdXQgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAc3RhdGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1VuZGVmaW5lZCAoaW5wdXQpIHtcbiAgcmV0dXJuICFpc0RlZmluZWQoaW5wdXQpXG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBpbnB1dCB2YWx1ZSBpcyBudWxsLlxuICogQHBhcmFtIHsqfSAtIHRoZSBpbnB1dCB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBzdGF0aWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbCAoaW5wdXQpIHtcbiByZXR1cm4gaW5wdXQgPT09IG51bGxcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGlucHV0IHZhbHVlIGlzIG5vdCBvbmUgb2YgYHVuZGVmaW5lZGAsIGBudWxsYCwgb3IgYE5hTmAuXG4gKiBAcGFyYW0geyp9IC0gdGhlIGlucHV0IHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQHN0YXRpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEZWZpbmVkVmFsdWUgKGlucHV0KSB7XG4gcmV0dXJuIGlzRGVmaW5lZChpbnB1dCkgJiYgIWlzTnVsbChpbnB1dCkgJiYgIU51bWJlci5pc05hTihpbnB1dClcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGlucHV0IHZhbHVlIGlzIGFuIEVTMjAxNSBgY2xhc3NgLlxuICogQHBhcmFtIHsqfSAtIHRoZSBpbnB1dCB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBzdGF0aWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xhc3MgKGlucHV0KSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gL15jbGFzcyAvLnRlc3QoRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBpbnB1dCBpcyBhIHN0cmluZywgbnVtYmVyLCBzeW1ib2wsIGJvb2xlYW4sIG51bGwgb3IgdW5kZWZpbmVkIHZhbHVlLlxuICogQHBhcmFtIHsqfSAtIHRoZSBpbnB1dCB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBzdGF0aWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJpbWl0aXZlIChpbnB1dCkge1xuICBpZiAoaW5wdXQgPT09IG51bGwpIHJldHVybiB0cnVlXG4gIHN3aXRjaCAodHlwZW9mIGlucHV0KSB7XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICBjYXNlICdudW1iZXInOlxuICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBpbnB1dCBpcyBhIFByb21pc2UuXG4gKiBAcGFyYW0geyp9IC0gdGhlIGlucHV0IHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQHN0YXRpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9taXNlIChpbnB1dCkge1xuICBpZiAoaW5wdXQpIHtcbiAgICBjb25zdCBpc1Byb21pc2UgPSBpc0RlZmluZWQoUHJvbWlzZSkgJiYgaW5wdXQgaW5zdGFuY2VvZiBQcm9taXNlXG4gICAgY29uc3QgaXNUaGVuYWJsZSA9IGlucHV0LnRoZW4gJiYgdHlwZW9mIGlucHV0LnRoZW4gPT09ICdmdW5jdGlvbidcbiAgICByZXR1cm4gISEoaXNQcm9taXNlIHx8IGlzVGhlbmFibGUpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGlucHV0IGlzIGFuIGl0ZXJhYmxlIChgTWFwYCwgYFNldGAsIGBBcnJheWAsIEdlbmVyYXRvciBldGMuKS5cbiAqIEBwYXJhbSB7Kn0gLSB0aGUgaW5wdXQgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAc3RhdGljXG4gKiBAZXhhbXBsZVxuICogPiB0LmlzSXRlcmFibGUoJ3N0cmluZycpXG4gKiB0cnVlXG4gKiA+IHQuaXNJdGVyYWJsZShuZXcgTWFwKCkpXG4gKiB0cnVlXG4gKiA+IHQuaXNJdGVyYWJsZShbXSlcbiAqIHRydWVcbiAqID4gdC5pc0l0ZXJhYmxlKChmdW5jdGlvbiAqICgpIHt9KSgpKVxuICogdHJ1ZVxuICogPiB0LmlzSXRlcmFibGUoUHJvbWlzZS5yZXNvbHZlKCkpXG4gKiBmYWxzZVxuICogPiB0LmlzSXRlcmFibGUoUHJvbWlzZSlcbiAqIGZhbHNlXG4gKiA+IHQuaXNJdGVyYWJsZSh0cnVlKVxuICogZmFsc2VcbiAqID4gdC5pc0l0ZXJhYmxlKHt9KVxuICogZmFsc2VcbiAqID4gdC5pc0l0ZXJhYmxlKDApXG4gKiBmYWxzZVxuICogPiB0LmlzSXRlcmFibGUoMS4xKVxuICogZmFsc2VcbiAqID4gdC5pc0l0ZXJhYmxlKE5hTilcbiAqIGZhbHNlXG4gKiA+IHQuaXNJdGVyYWJsZShJbmZpbml0eSlcbiAqIGZhbHNlXG4gKiA+IHQuaXNJdGVyYWJsZShmdW5jdGlvbiAoKSB7fSlcbiAqIGZhbHNlXG4gKiA+IHQuaXNJdGVyYWJsZShEYXRlKVxuICogZmFsc2VcbiAqID4gdC5pc0l0ZXJhYmxlKClcbiAqIGZhbHNlXG4gKiA+IHQuaXNJdGVyYWJsZSh7IHRoZW46IGZ1bmN0aW9uICgpIHt9IH0pXG4gKiBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJdGVyYWJsZSAoaW5wdXQpIHtcbiAgaWYgKGlucHV0ID09PSBudWxsIHx8ICFpc0RlZmluZWQoaW5wdXQpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiBpbnB1dFtTeW1ib2wuaXRlcmF0b3JdID09PSAnZnVuY3Rpb24nIHx8XG4gICAgICB0eXBlb2YgaW5wdXRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAnZnVuY3Rpb24nXG4gICAgKVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBpbnB1dCB2YWx1ZSBpcyBhIHN0cmluZy4gVGhlIGVxdWl2YWxlbnQgb2YgYHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZydgIGZvciB1c2UgaW4gZnVuY2l0b25hbCBjb250ZXh0cy5cbiAqIEBwYXJhbSB7Kn0gLSB0aGUgaW5wdXQgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAc3RhdGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyAoaW5wdXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZydcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGlucHV0IHZhbHVlIGlzIGEgZnVuY3Rpb24uIFRoZSBlcXVpdmFsZW50IG9mIGB0eXBlb2YgaW5wdXQgPT09ICdmdW5jdGlvbidgIGZvciB1c2UgaW4gZnVuY2l0b25hbCBjb250ZXh0cy5cbiAqIEBwYXJhbSB7Kn0gLSB0aGUgaW5wdXQgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAc3RhdGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uIChpbnB1dCkge1xuICByZXR1cm4gdHlwZW9mIGlucHV0ID09PSAnZnVuY3Rpb24nXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaXNOdW1iZXIsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzQXJyYXlMaWtlLFxuICBpc09iamVjdCxcbiAgaXNEZWZpbmVkLFxuICBpc1VuZGVmaW5lZCxcbiAgaXNOdWxsLFxuICBpc0RlZmluZWRWYWx1ZSxcbiAgaXNDbGFzcyxcbiAgaXNQcmltaXRpdmUsXG4gIGlzUHJvbWlzZSxcbiAgaXNJdGVyYWJsZSxcbiAgaXNTdHJpbmcsXG4gIGlzRnVuY3Rpb25cbn1cbiIsImltcG9ydCBpc1BsYWluT2JqZWN0IGZyb20gJ2lzLXBsYWluLW9iaic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNvcnRLZXlzKG9iamVjdCwgb3B0aW9ucyA9IHt9KSB7XG5cdGlmICghaXNQbGFpbk9iamVjdChvYmplY3QpICYmICFBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhIHBsYWluIG9iamVjdCBvciBhcnJheScpO1xuXHR9XG5cblx0Y29uc3Qge2RlZXAsIGNvbXBhcmV9ID0gb3B0aW9ucztcblx0Y29uc3Qgc2VlbklucHV0ID0gW107XG5cdGNvbnN0IHNlZW5PdXRwdXQgPSBbXTtcblxuXHRjb25zdCBkZWVwU29ydEFycmF5ID0gYXJyYXkgPT4ge1xuXHRcdGNvbnN0IHNlZW5JbmRleCA9IHNlZW5JbnB1dC5pbmRleE9mKGFycmF5KTtcblx0XHRpZiAoc2VlbkluZGV4ICE9PSAtMSkge1xuXHRcdFx0cmV0dXJuIHNlZW5PdXRwdXRbc2VlbkluZGV4XTtcblx0XHR9XG5cblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblx0XHRzZWVuSW5wdXQucHVzaChhcnJheSk7XG5cdFx0c2Vlbk91dHB1dC5wdXNoKHJlc3VsdCk7XG5cblx0XHRyZXN1bHQucHVzaCguLi5hcnJheS5tYXAoaXRlbSA9PiB7XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkge1xuXHRcdFx0XHRyZXR1cm4gZGVlcFNvcnRBcnJheShpdGVtKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzUGxhaW5PYmplY3QoaXRlbSkpIHtcblx0XHRcdFx0cmV0dXJuIF9zb3J0S2V5cyhpdGVtKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGl0ZW07XG5cdFx0fSkpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcblxuXHRjb25zdCBfc29ydEtleXMgPSBvYmplY3QgPT4ge1xuXHRcdGNvbnN0IHNlZW5JbmRleCA9IHNlZW5JbnB1dC5pbmRleE9mKG9iamVjdCk7XG5cdFx0aWYgKHNlZW5JbmRleCAhPT0gLTEpIHtcblx0XHRcdHJldHVybiBzZWVuT3V0cHV0W3NlZW5JbmRleF07XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCkuc29ydChjb21wYXJlKTtcblxuXHRcdHNlZW5JbnB1dC5wdXNoKG9iamVjdCk7XG5cdFx0c2Vlbk91dHB1dC5wdXNoKHJlc3VsdCk7XG5cblx0XHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXHRcdFx0bGV0IG5ld1ZhbHVlO1xuXG5cdFx0XHRpZiAoZGVlcCAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0XHRuZXdWYWx1ZSA9IGRlZXBTb3J0QXJyYXkodmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3VmFsdWUgPSBkZWVwICYmIGlzUGxhaW5PYmplY3QodmFsdWUpID8gX3NvcnRLZXlzKHZhbHVlKSA6IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzdWx0LCBrZXksIHtcblx0XHRcdFx0Li4uT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSksXG5cdFx0XHRcdHZhbHVlOiBuZXdWYWx1ZVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcblxuXHRpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG5cdFx0cmV0dXJuIGRlZXAgPyBkZWVwU29ydEFycmF5KG9iamVjdCkgOiBvYmplY3Quc2xpY2UoKTtcblx0fVxuXG5cdHJldHVybiBfc29ydEtleXMob2JqZWN0KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcblx0aWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuXHRyZXR1cm4gKHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbHVlKSAmJiAhKFN5bWJvbC5pdGVyYXRvciBpbiB2YWx1ZSk7XG59XG4iXX0=
|