raindancers-cloudfront 0.0.43 → 0.0.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (438) hide show
  1. package/lib/cloudfront/edgeAssetHash.d.ts +27 -9
  2. package/lib/cloudfront/edgeAssetHash.js +42 -10
  3. package/lib/cloudfront/lambda-bundled/cognito-auth/__pycache__/six.cpython-312.pyc +0 -0
  4. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/__init__.cpython-312.pyc +0 -0
  5. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/_cffi_gen_src.cpython-312.pyc +0 -0
  6. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/_imp_emulation.cpython-312.pyc +0 -0
  7. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/_shimmed_dist_utils.cpython-312.pyc +0 -0
  8. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/api.cpython-312.pyc +0 -0
  9. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/backend_ctypes.cpython-312.pyc +0 -0
  10. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/cffi_opcode.cpython-312.pyc +0 -0
  11. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/commontypes.cpython-312.pyc +0 -0
  12. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/cparser.cpython-312.pyc +0 -0
  13. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/error.cpython-312.pyc +0 -0
  14. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/ffiplatform.cpython-312.pyc +0 -0
  15. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/gen_src.cpython-312.pyc +0 -0
  16. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/lock.cpython-312.pyc +0 -0
  17. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/model.cpython-312.pyc +0 -0
  18. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/pkgconfig.cpython-312.pyc +0 -0
  19. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/recompiler.cpython-312.pyc +0 -0
  20. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/setuptools_ext.cpython-312.pyc +0 -0
  21. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/vengine_cpy.cpython-312.pyc +0 -0
  22. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/vengine_gen.cpython-312.pyc +0 -0
  23. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/verifier.cpython-312.pyc +0 -0
  24. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/__about__.cpython-312.pyc +0 -0
  25. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/__init__.cpython-312.pyc +0 -0
  26. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/exceptions.cpython-312.pyc +0 -0
  27. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/fernet.cpython-312.pyc +0 -0
  28. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/utils.cpython-312.pyc +0 -0
  29. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/__pycache__/__init__.cpython-312.pyc +0 -0
  30. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/__pycache__/_oid.cpython-312.pyc +0 -0
  31. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/__pycache__/__init__.cpython-312.pyc +0 -0
  32. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
  33. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/aead.cpython-312.pyc +0 -0
  34. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/backend.cpython-312.pyc +0 -0
  35. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/ciphers.cpython-312.pyc +0 -0
  36. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/cmac.cpython-312.pyc +0 -0
  37. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/decode_asn1.cpython-312.pyc +0 -0
  38. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/ec.cpython-312.pyc +0 -0
  39. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/rsa.cpython-312.pyc +0 -0
  40. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/utils.cpython-312.pyc +0 -0
  41. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/__pycache__/__init__.cpython-312.pyc +0 -0
  42. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
  43. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-312.pyc +0 -0
  44. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-312.pyc +0 -0
  45. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/__init__.cpython-312.pyc +0 -0
  46. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/_asymmetric.cpython-312.pyc +0 -0
  47. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/_cipheralgorithm.cpython-312.pyc +0 -0
  48. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/_serialization.cpython-312.pyc +0 -0
  49. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/cmac.cpython-312.pyc +0 -0
  50. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/constant_time.cpython-312.pyc +0 -0
  51. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/hashes.cpython-312.pyc +0 -0
  52. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/hmac.cpython-312.pyc +0 -0
  53. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/keywrap.cpython-312.pyc +0 -0
  54. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/padding.cpython-312.pyc +0 -0
  55. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/poly1305.cpython-312.pyc +0 -0
  56. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/__init__.cpython-312.pyc +0 -0
  57. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dh.cpython-312.pyc +0 -0
  58. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dsa.cpython-312.pyc +0 -0
  59. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ec.cpython-312.pyc +0 -0
  60. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed25519.cpython-312.pyc +0 -0
  61. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed448.cpython-312.pyc +0 -0
  62. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/padding.cpython-312.pyc +0 -0
  63. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/rsa.cpython-312.pyc +0 -0
  64. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/types.cpython-312.pyc +0 -0
  65. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/utils.cpython-312.pyc +0 -0
  66. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x25519.cpython-312.pyc +0 -0
  67. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x448.cpython-312.pyc +0 -0
  68. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/__init__.cpython-312.pyc +0 -0
  69. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/aead.cpython-312.pyc +0 -0
  70. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/algorithms.cpython-312.pyc +0 -0
  71. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/base.cpython-312.pyc +0 -0
  72. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/modes.cpython-312.pyc +0 -0
  73. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/__init__.cpython-312.pyc +0 -0
  74. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/concatkdf.cpython-312.pyc +0 -0
  75. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/hkdf.cpython-312.pyc +0 -0
  76. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/kbkdf.cpython-312.pyc +0 -0
  77. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/pbkdf2.cpython-312.pyc +0 -0
  78. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/scrypt.cpython-312.pyc +0 -0
  79. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/x963kdf.cpython-312.pyc +0 -0
  80. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/__init__.cpython-312.pyc +0 -0
  81. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/base.cpython-312.pyc +0 -0
  82. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs12.cpython-312.pyc +0 -0
  83. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs7.cpython-312.pyc +0 -0
  84. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/ssh.cpython-312.pyc +0 -0
  85. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/twofactor/__pycache__/__init__.cpython-312.pyc +0 -0
  86. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/twofactor/__pycache__/hotp.cpython-312.pyc +0 -0
  87. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/twofactor/__pycache__/totp.cpython-312.pyc +0 -0
  88. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/__init__.cpython-312.pyc +0 -0
  89. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/base.cpython-312.pyc +0 -0
  90. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/certificate_transparency.cpython-312.pyc +0 -0
  91. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/extensions.cpython-312.pyc +0 -0
  92. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/general_name.cpython-312.pyc +0 -0
  93. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/name.cpython-312.pyc +0 -0
  94. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/ocsp.cpython-312.pyc +0 -0
  95. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/oid.cpython-312.pyc +0 -0
  96. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/__init__.cpython-312.pyc +0 -0
  97. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/algorithms.cpython-312.pyc +0 -0
  98. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/api_jwk.cpython-312.pyc +0 -0
  99. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/api_jws.cpython-312.pyc +0 -0
  100. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/api_jwt.cpython-312.pyc +0 -0
  101. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/exceptions.cpython-312.pyc +0 -0
  102. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/help.cpython-312.pyc +0 -0
  103. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/jwk_set_cache.cpython-312.pyc +0 -0
  104. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/jwks_client.cpython-312.pyc +0 -0
  105. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/types.cpython-312.pyc +0 -0
  106. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/utils.cpython-312.pyc +0 -0
  107. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/warnings.cpython-312.pyc +0 -0
  108. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/__init__.cpython-312.pyc +0 -0
  109. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/_ast_gen.cpython-312.pyc +0 -0
  110. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/ast_transforms.cpython-312.pyc +0 -0
  111. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_ast.cpython-312.pyc +0 -0
  112. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_generator.cpython-312.pyc +0 -0
  113. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_lexer.cpython-312.pyc +0 -0
  114. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_parser.cpython-312.pyc +0 -0
  115. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/__pycache__/__init__.cpython-312.pyc +0 -0
  116. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/__pycache__/debug.cpython-312.pyc +0 -0
  117. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/__pycache__/error.cpython-312.pyc +0 -0
  118. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/__pycache__/__init__.cpython-312.pyc +0 -0
  119. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/__pycache__/streaming.cpython-312.pyc +0 -0
  120. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/__pycache__/__init__.cpython-312.pyc +0 -0
  121. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/__pycache__/decoder.cpython-312.pyc +0 -0
  122. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/__pycache__/encoder.cpython-312.pyc +0 -0
  123. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/__pycache__/eoo.cpython-312.pyc +0 -0
  124. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/cer/__pycache__/__init__.cpython-312.pyc +0 -0
  125. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/cer/__pycache__/decoder.cpython-312.pyc +0 -0
  126. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/cer/__pycache__/encoder.cpython-312.pyc +0 -0
  127. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/der/__pycache__/__init__.cpython-312.pyc +0 -0
  128. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/der/__pycache__/decoder.cpython-312.pyc +0 -0
  129. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/der/__pycache__/encoder.cpython-312.pyc +0 -0
  130. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/native/__pycache__/__init__.cpython-312.pyc +0 -0
  131. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/native/__pycache__/decoder.cpython-312.pyc +0 -0
  132. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/native/__pycache__/encoder.cpython-312.pyc +0 -0
  133. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/compat/__pycache__/__init__.cpython-312.pyc +0 -0
  134. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/compat/__pycache__/integer.cpython-312.pyc +0 -0
  135. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/__init__.cpython-312.pyc +0 -0
  136. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/base.cpython-312.pyc +0 -0
  137. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/char.cpython-312.pyc +0 -0
  138. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/constraint.cpython-312.pyc +0 -0
  139. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/error.cpython-312.pyc +0 -0
  140. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/namedtype.cpython-312.pyc +0 -0
  141. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/namedval.cpython-312.pyc +0 -0
  142. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/opentype.cpython-312.pyc +0 -0
  143. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/tag.cpython-312.pyc +0 -0
  144. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/tagmap.cpython-312.pyc +0 -0
  145. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/univ.cpython-312.pyc +0 -0
  146. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/useful.cpython-312.pyc +0 -0
  147. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/__init__.cpython-312.pyc +0 -0
  148. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/asn1.cpython-312.pyc +0 -0
  149. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/cli.cpython-312.pyc +0 -0
  150. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/common.cpython-312.pyc +0 -0
  151. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/core.cpython-312.pyc +0 -0
  152. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/key.cpython-312.pyc +0 -0
  153. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/parallel.cpython-312.pyc +0 -0
  154. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/pem.cpython-312.pyc +0 -0
  155. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/pkcs1.cpython-312.pyc +0 -0
  156. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/pkcs1_v2.cpython-312.pyc +0 -0
  157. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/prime.cpython-312.pyc +0 -0
  158. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/randnum.cpython-312.pyc +0 -0
  159. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/transform.cpython-312.pyc +0 -0
  160. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/util.cpython-312.pyc +0 -0
  161. package/lib/cloudfront/lambda-bundled/edge-auth/__pycache__/six.cpython-312.pyc +0 -0
  162. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/__init__.cpython-312.pyc +0 -0
  163. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/_cffi_gen_src.cpython-312.pyc +0 -0
  164. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/_imp_emulation.cpython-312.pyc +0 -0
  165. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/_shimmed_dist_utils.cpython-312.pyc +0 -0
  166. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/api.cpython-312.pyc +0 -0
  167. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/backend_ctypes.cpython-312.pyc +0 -0
  168. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/cffi_opcode.cpython-312.pyc +0 -0
  169. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/commontypes.cpython-312.pyc +0 -0
  170. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/cparser.cpython-312.pyc +0 -0
  171. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/error.cpython-312.pyc +0 -0
  172. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/ffiplatform.cpython-312.pyc +0 -0
  173. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/gen_src.cpython-312.pyc +0 -0
  174. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/lock.cpython-312.pyc +0 -0
  175. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/model.cpython-312.pyc +0 -0
  176. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/pkgconfig.cpython-312.pyc +0 -0
  177. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/recompiler.cpython-312.pyc +0 -0
  178. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/setuptools_ext.cpython-312.pyc +0 -0
  179. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/vengine_cpy.cpython-312.pyc +0 -0
  180. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/vengine_gen.cpython-312.pyc +0 -0
  181. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/verifier.cpython-312.pyc +0 -0
  182. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/__about__.cpython-312.pyc +0 -0
  183. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/__init__.cpython-312.pyc +0 -0
  184. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/exceptions.cpython-312.pyc +0 -0
  185. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/fernet.cpython-312.pyc +0 -0
  186. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/utils.cpython-312.pyc +0 -0
  187. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/__pycache__/__init__.cpython-312.pyc +0 -0
  188. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/__pycache__/_oid.cpython-312.pyc +0 -0
  189. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/__pycache__/__init__.cpython-312.pyc +0 -0
  190. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
  191. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/aead.cpython-312.pyc +0 -0
  192. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/backend.cpython-312.pyc +0 -0
  193. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/ciphers.cpython-312.pyc +0 -0
  194. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/cmac.cpython-312.pyc +0 -0
  195. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/decode_asn1.cpython-312.pyc +0 -0
  196. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/ec.cpython-312.pyc +0 -0
  197. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/rsa.cpython-312.pyc +0 -0
  198. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/utils.cpython-312.pyc +0 -0
  199. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/__pycache__/__init__.cpython-312.pyc +0 -0
  200. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
  201. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-312.pyc +0 -0
  202. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-312.pyc +0 -0
  203. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/__init__.cpython-312.pyc +0 -0
  204. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/_asymmetric.cpython-312.pyc +0 -0
  205. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/_cipheralgorithm.cpython-312.pyc +0 -0
  206. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/_serialization.cpython-312.pyc +0 -0
  207. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/cmac.cpython-312.pyc +0 -0
  208. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/constant_time.cpython-312.pyc +0 -0
  209. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/hashes.cpython-312.pyc +0 -0
  210. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/hmac.cpython-312.pyc +0 -0
  211. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/keywrap.cpython-312.pyc +0 -0
  212. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/padding.cpython-312.pyc +0 -0
  213. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/poly1305.cpython-312.pyc +0 -0
  214. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/__init__.cpython-312.pyc +0 -0
  215. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dh.cpython-312.pyc +0 -0
  216. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dsa.cpython-312.pyc +0 -0
  217. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ec.cpython-312.pyc +0 -0
  218. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed25519.cpython-312.pyc +0 -0
  219. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed448.cpython-312.pyc +0 -0
  220. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/padding.cpython-312.pyc +0 -0
  221. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/rsa.cpython-312.pyc +0 -0
  222. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/types.cpython-312.pyc +0 -0
  223. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/utils.cpython-312.pyc +0 -0
  224. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x25519.cpython-312.pyc +0 -0
  225. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x448.cpython-312.pyc +0 -0
  226. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/__init__.cpython-312.pyc +0 -0
  227. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/aead.cpython-312.pyc +0 -0
  228. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/algorithms.cpython-312.pyc +0 -0
  229. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/base.cpython-312.pyc +0 -0
  230. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/modes.cpython-312.pyc +0 -0
  231. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/__init__.cpython-312.pyc +0 -0
  232. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/concatkdf.cpython-312.pyc +0 -0
  233. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/hkdf.cpython-312.pyc +0 -0
  234. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/kbkdf.cpython-312.pyc +0 -0
  235. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/pbkdf2.cpython-312.pyc +0 -0
  236. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/scrypt.cpython-312.pyc +0 -0
  237. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/x963kdf.cpython-312.pyc +0 -0
  238. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/__init__.cpython-312.pyc +0 -0
  239. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/base.cpython-312.pyc +0 -0
  240. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs12.cpython-312.pyc +0 -0
  241. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs7.cpython-312.pyc +0 -0
  242. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/ssh.cpython-312.pyc +0 -0
  243. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/twofactor/__pycache__/__init__.cpython-312.pyc +0 -0
  244. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/twofactor/__pycache__/hotp.cpython-312.pyc +0 -0
  245. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/twofactor/__pycache__/totp.cpython-312.pyc +0 -0
  246. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/__init__.cpython-312.pyc +0 -0
  247. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/base.cpython-312.pyc +0 -0
  248. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/certificate_transparency.cpython-312.pyc +0 -0
  249. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/extensions.cpython-312.pyc +0 -0
  250. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/general_name.cpython-312.pyc +0 -0
  251. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/name.cpython-312.pyc +0 -0
  252. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/ocsp.cpython-312.pyc +0 -0
  253. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/oid.cpython-312.pyc +0 -0
  254. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/__init__.cpython-312.pyc +0 -0
  255. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/algorithms.cpython-312.pyc +0 -0
  256. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/api_jwk.cpython-312.pyc +0 -0
  257. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/api_jws.cpython-312.pyc +0 -0
  258. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/api_jwt.cpython-312.pyc +0 -0
  259. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/exceptions.cpython-312.pyc +0 -0
  260. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/help.cpython-312.pyc +0 -0
  261. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/jwk_set_cache.cpython-312.pyc +0 -0
  262. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/jwks_client.cpython-312.pyc +0 -0
  263. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/types.cpython-312.pyc +0 -0
  264. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/utils.cpython-312.pyc +0 -0
  265. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/warnings.cpython-312.pyc +0 -0
  266. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/__init__.cpython-312.pyc +0 -0
  267. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/_ast_gen.cpython-312.pyc +0 -0
  268. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/ast_transforms.cpython-312.pyc +0 -0
  269. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_ast.cpython-312.pyc +0 -0
  270. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_generator.cpython-312.pyc +0 -0
  271. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_lexer.cpython-312.pyc +0 -0
  272. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_parser.cpython-312.pyc +0 -0
  273. package/lib/cloudfront/lambda-bundled/hmacSecret/__pycache__/six.cpython-312.pyc +0 -0
  274. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/__init__.cpython-312.pyc +0 -0
  275. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/_aws_iot_metrics.cpython-312.pyc +0 -0
  276. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/_test.cpython-312.pyc +0 -0
  277. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/auth.cpython-312.pyc +0 -0
  278. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/cbor.cpython-312.pyc +0 -0
  279. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/checksums.cpython-312.pyc +0 -0
  280. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/common.cpython-312.pyc +0 -0
  281. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/crypto.cpython-312.pyc +0 -0
  282. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/exceptions.cpython-312.pyc +0 -0
  283. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/http.cpython-312.pyc +0 -0
  284. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/io.cpython-312.pyc +0 -0
  285. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/logging.cpython-312.pyc +0 -0
  286. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/mqtt.cpython-312.pyc +0 -0
  287. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/mqtt5.cpython-312.pyc +0 -0
  288. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/mqtt_request_response.cpython-312.pyc +0 -0
  289. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/s3.cpython-312.pyc +0 -0
  290. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/websocket.cpython-312.pyc +0 -0
  291. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/aio/__pycache__/__init__.cpython-312.pyc +0 -0
  292. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/aio/__pycache__/http.cpython-312.pyc +0 -0
  293. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/eventstream/__pycache__/__init__.cpython-312.pyc +0 -0
  294. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/eventstream/__pycache__/rpc.cpython-312.pyc +0 -0
  295. package/lib/cloudfront/lambda-bundled/hmacSecret/bin/__pycache__/jp.cpython-312.pyc +0 -0
  296. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/__init__.cpython-312.pyc +0 -0
  297. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/args.cpython-312.pyc +0 -0
  298. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/auth.cpython-312.pyc +0 -0
  299. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/awsrequest.cpython-312.pyc +0 -0
  300. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/client.cpython-312.pyc +0 -0
  301. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/compat.cpython-312.pyc +0 -0
  302. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/compress.cpython-312.pyc +0 -0
  303. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/config.cpython-312.pyc +0 -0
  304. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/configloader.cpython-312.pyc +0 -0
  305. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/configprovider.cpython-312.pyc +0 -0
  306. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/context.cpython-312.pyc +0 -0
  307. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/credentials.cpython-312.pyc +0 -0
  308. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/discovery.cpython-312.pyc +0 -0
  309. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/endpoint.cpython-312.pyc +0 -0
  310. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/endpoint_provider.cpython-312.pyc +0 -0
  311. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/errorfactory.cpython-312.pyc +0 -0
  312. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/eventstream.cpython-312.pyc +0 -0
  313. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/exceptions.cpython-312.pyc +0 -0
  314. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/handlers.cpython-312.pyc +0 -0
  315. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/history.cpython-312.pyc +0 -0
  316. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/hooks.cpython-312.pyc +0 -0
  317. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/httpchecksum.cpython-312.pyc +0 -0
  318. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/httpsession.cpython-312.pyc +0 -0
  319. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/loaders.cpython-312.pyc +0 -0
  320. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/model.cpython-312.pyc +0 -0
  321. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/monitoring.cpython-312.pyc +0 -0
  322. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/paginate.cpython-312.pyc +0 -0
  323. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/parsers.cpython-312.pyc +0 -0
  324. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/plugin.cpython-312.pyc +0 -0
  325. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/regions.cpython-312.pyc +0 -0
  326. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/response.cpython-312.pyc +0 -0
  327. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/retryhandler.cpython-312.pyc +0 -0
  328. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/serialize.cpython-312.pyc +0 -0
  329. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/session.cpython-312.pyc +0 -0
  330. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/signers.cpython-312.pyc +0 -0
  331. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/stub.cpython-312.pyc +0 -0
  332. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/tokens.cpython-312.pyc +0 -0
  333. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/translate.cpython-312.pyc +0 -0
  334. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/useragent.cpython-312.pyc +0 -0
  335. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/utils.cpython-312.pyc +0 -0
  336. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/validate.cpython-312.pyc +0 -0
  337. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/waiter.cpython-312.pyc +0 -0
  338. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/crt/__pycache__/__init__.cpython-312.pyc +0 -0
  339. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/crt/__pycache__/auth.cpython-312.pyc +0 -0
  340. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/__init__.cpython-312.pyc +0 -0
  341. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/client.cpython-312.pyc +0 -0
  342. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/docstring.cpython-312.pyc +0 -0
  343. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/example.cpython-312.pyc +0 -0
  344. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/method.cpython-312.pyc +0 -0
  345. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/paginator.cpython-312.pyc +0 -0
  346. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/params.cpython-312.pyc +0 -0
  347. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/service.cpython-312.pyc +0 -0
  348. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/shape.cpython-312.pyc +0 -0
  349. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/sharedexample.cpython-312.pyc +0 -0
  350. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/translator.cpython-312.pyc +0 -0
  351. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/utils.cpython-312.pyc +0 -0
  352. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/waiter.cpython-312.pyc +0 -0
  353. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/__init__.cpython-312.pyc +0 -0
  354. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/docstringparser.cpython-312.pyc +0 -0
  355. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/restdoc.cpython-312.pyc +0 -0
  356. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/style.cpython-312.pyc +0 -0
  357. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/__init__.cpython-312.pyc +0 -0
  358. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/adaptive.cpython-312.pyc +0 -0
  359. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/base.cpython-312.pyc +0 -0
  360. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/bucket.cpython-312.pyc +0 -0
  361. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/quota.cpython-312.pyc +0 -0
  362. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/special.cpython-312.pyc +0 -0
  363. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/standard.cpython-312.pyc +0 -0
  364. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/throttling.cpython-312.pyc +0 -0
  365. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/__pycache__/__init__.cpython-312.pyc +0 -0
  366. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/__pycache__/six.cpython-312.pyc +0 -0
  367. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/__pycache__/__init__.cpython-312.pyc +0 -0
  368. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/__pycache__/exceptions.cpython-312.pyc +0 -0
  369. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/packages/__pycache__/__init__.cpython-312.pyc +0 -0
  370. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/packages/urllib3/__pycache__/__init__.cpython-312.pyc +0 -0
  371. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/packages/urllib3/__pycache__/exceptions.cpython-312.pyc +0 -0
  372. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/__init__.cpython-312.pyc +0 -0
  373. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/_common.cpython-312.pyc +0 -0
  374. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/_version.cpython-312.pyc +0 -0
  375. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/easter.cpython-312.pyc +0 -0
  376. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/relativedelta.cpython-312.pyc +0 -0
  377. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/rrule.cpython-312.pyc +0 -0
  378. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/tzwin.cpython-312.pyc +0 -0
  379. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/utils.cpython-312.pyc +0 -0
  380. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/parser/__pycache__/__init__.cpython-312.pyc +0 -0
  381. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/parser/__pycache__/_parser.cpython-312.pyc +0 -0
  382. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/parser/__pycache__/isoparser.cpython-312.pyc +0 -0
  383. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/__init__.cpython-312.pyc +0 -0
  384. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/_common.cpython-312.pyc +0 -0
  385. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/_factories.cpython-312.pyc +0 -0
  386. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/tz.cpython-312.pyc +0 -0
  387. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/win.cpython-312.pyc +0 -0
  388. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/zoneinfo/__pycache__/__init__.cpython-312.pyc +0 -0
  389. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/zoneinfo/__pycache__/rebuild.cpython-312.pyc +0 -0
  390. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/__init__.cpython-312.pyc +0 -0
  391. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/ast.cpython-312.pyc +0 -0
  392. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/compat.cpython-312.pyc +0 -0
  393. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/exceptions.cpython-312.pyc +0 -0
  394. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/functions.cpython-312.pyc +0 -0
  395. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/lexer.cpython-312.pyc +0 -0
  396. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/parser.cpython-312.pyc +0 -0
  397. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/visitor.cpython-312.pyc +0 -0
  398. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/__init__.cpython-312.pyc +0 -0
  399. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_base_connection.cpython-312.pyc +0 -0
  400. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_collections.cpython-312.pyc +0 -0
  401. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_request_methods.cpython-312.pyc +0 -0
  402. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_version.cpython-312.pyc +0 -0
  403. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/connection.cpython-312.pyc +0 -0
  404. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/connectionpool.cpython-312.pyc +0 -0
  405. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/exceptions.cpython-312.pyc +0 -0
  406. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/fields.cpython-312.pyc +0 -0
  407. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/filepost.cpython-312.pyc +0 -0
  408. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/poolmanager.cpython-312.pyc +0 -0
  409. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/response.cpython-312.pyc +0 -0
  410. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/__pycache__/__init__.cpython-312.pyc +0 -0
  411. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/__pycache__/pyopenssl.cpython-312.pyc +0 -0
  412. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/__pycache__/socks.cpython-312.pyc +0 -0
  413. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/__init__.cpython-312.pyc +0 -0
  414. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/connection.cpython-312.pyc +0 -0
  415. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/fetch.cpython-312.pyc +0 -0
  416. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/request.cpython-312.pyc +0 -0
  417. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/response.cpython-312.pyc +0 -0
  418. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/http2/__pycache__/__init__.cpython-312.pyc +0 -0
  419. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/http2/__pycache__/connection.cpython-312.pyc +0 -0
  420. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/http2/__pycache__/probe.cpython-312.pyc +0 -0
  421. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/__init__.cpython-312.pyc +0 -0
  422. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/connection.cpython-312.pyc +0 -0
  423. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/proxy.cpython-312.pyc +0 -0
  424. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/request.cpython-312.pyc +0 -0
  425. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/response.cpython-312.pyc +0 -0
  426. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/retry.cpython-312.pyc +0 -0
  427. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/ssl_.cpython-312.pyc +0 -0
  428. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc +0 -0
  429. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/ssltransport.cpython-312.pyc +0 -0
  430. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/timeout.cpython-312.pyc +0 -0
  431. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/url.cpython-312.pyc +0 -0
  432. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/util.cpython-312.pyc +0 -0
  433. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/wait.cpython-312.pyc +0 -0
  434. package/lib/cloudfront/patterns/cognito-customui-auth.js +5 -5
  435. package/lib/cloudfront/patterns/cognitoCustomerPool.d.ts +23 -0
  436. package/lib/cloudfront/patterns/cognitoCustomerPool.js +44 -7
  437. package/lib/cloudfront/patterns/securedCloudFront.js +6 -5
  438. package/package.json +1 -1
@@ -68,6 +68,16 @@ class CognitoCustomerPool extends constructs.Construct {
68
68
  + 'EmailConfiguration on a verified same-account identity. This precondition is checked '
69
69
  + 'before any email is routed, so the custom email sender does not satisfy it.');
70
70
  }
71
+ if (props.passwordlessEmailOtp && props.emailOtpMfa) {
72
+ throw new Error('CognitoCustomerPool: passwordlessEmailOtp and emailOtpMfa are mutually exclusive — '
73
+ + 'passwordless uses EMAIL_OTP as a FIRST auth factor (MFA off), while emailOtpMfa uses it '
74
+ + 'as a SECOND factor (MFA on). Choose one.');
75
+ }
76
+ if (props.passwordlessEmailOtp && (!props.customEmailSenderLambda || !props.emailConfiguration)) {
77
+ throw new Error('CognitoCustomerPool: passwordlessEmailOtp requires customEmailSenderLambda, customSenderKmsKey '
78
+ + 'and emailConfiguration — the first-factor EMAIL_OTP code is delivered by the custom email '
79
+ + 'sender, and Cognito requires the same DEVELOPER SES EmailConfiguration enablement precondition.');
80
+ }
71
81
  // With emailOtpMfa, EMAIL_OTP is the sole factor and is applied via an L1
72
82
  // override below; do NOT pass mfaSecondFactor.email to the L2 (its validateEmailMfa
73
83
  // demands a `email` UserPoolEmail be set, which we supply separately via
@@ -83,12 +93,19 @@ class CognitoCustomerPool extends constructs.Construct {
83
93
  // passwordless-email design. Otherwise keep the email-only default.
84
94
  ? aws_cdk_lib_1.aws_cognito.AccountRecovery.NONE
85
95
  : aws_cdk_lib_1.aws_cognito.AccountRecovery.EMAIL_ONLY;
96
+ // Passwordless uses EMAIL_OTP as a FIRST auth factor, which Cognito forbids while
97
+ // MFA is ON ("Only PASSWORD and WEB_AUTHN can be enabled as an auth factor if MFA
98
+ // is enabled"). So passwordless forces MFA OFF. NB: the OFF->ON transition is
99
+ // irreversible via the API — a pool created passwordless cannot later gain MFA in place.
100
+ const mfaConfig = props.passwordlessEmailOtp
101
+ ? aws_cdk_lib_1.aws_cognito.Mfa.OFF
102
+ : (props.mfa ?? aws_cdk_lib_1.aws_cognito.Mfa.REQUIRED);
86
103
  this.userPool = new aws_cdk_lib_1.aws_cognito.UserPool(this, 'UserPool', {
87
104
  userPoolName: props.userPoolName,
88
105
  selfSignUpEnabled: props.selfSignUpEnabled ?? false,
89
106
  signInAliases: { email: true },
90
107
  signInCaseSensitive: false,
91
- mfa: props.mfa ?? aws_cdk_lib_1.aws_cognito.Mfa.REQUIRED,
108
+ mfa: mfaConfig,
92
109
  mfaSecondFactor: l2MfaSecondFactor,
93
110
  passwordPolicy: props.passwordPolicy ?? {
94
111
  minLength: 12,
@@ -135,6 +152,17 @@ class CognitoCustomerPool extends constructs.Construct {
135
152
  const cfnPool = this.userPool.node.defaultChild;
136
153
  cfnPool.enabledMfas = ['EMAIL_OTP'];
137
154
  }
155
+ if (props.passwordlessEmailOtp) {
156
+ // Choice-based sign-in: EMAIL_OTP as a first auth factor. PASSWORD is MANDATORY
157
+ // in AllowedFirstAuthFactors (Cognito rejects a list without it), so it stays —
158
+ // but the app client below drops the password (userSrp) flow and the consumer's
159
+ // UI never offers it, so the password path is unreachable through this client.
160
+ const cfnPool = this.userPool.node.defaultChild;
161
+ cfnPool.policies = {
162
+ ...cfnPool.policies,
163
+ signInPolicy: { allowedFirstAuthFactors: ['PASSWORD', 'EMAIL_OTP'] },
164
+ };
165
+ }
138
166
  const preTokenLambda = props.preTokenGenerationLambda ?? new aws_cdk_lib_1.aws_lambda.Function(this, 'PreTokenLambda', {
139
167
  runtime: aws_cdk_lib_1.aws_lambda.Runtime.PYTHON_3_12,
140
168
  handler: 'index.handler',
@@ -164,11 +192,20 @@ class CognitoCustomerPool extends constructs.Construct {
164
192
  const client = new aws_cdk_lib_1.aws_cognito.UserPoolClient(this, `Client${spec.key}`, {
165
193
  userPool: this.userPool,
166
194
  generateSecret: spec.generateSecret ?? false,
167
- authFlows: {
168
- userSrp: true,
169
- custom: props.enableCustomAuthFlow ?? false,
170
- // userPassword / adminUserPassword intentionally omitted (disabled).
171
- },
195
+ authFlows: props.passwordlessEmailOtp
196
+ ? {
197
+ // Passwordless: enable choice-based ALLOW_USER_AUTH and DROP userSrp so the
198
+ // password challenge cannot be initiated through this client — even by a
199
+ // direct API call. PASSWORD stays a pool factor (Cognito's rule) but is
200
+ // unreachable via the storefront client.
201
+ user: true,
202
+ custom: props.enableCustomAuthFlow ?? false,
203
+ }
204
+ : {
205
+ userSrp: true,
206
+ custom: props.enableCustomAuthFlow ?? false,
207
+ // userPassword / adminUserPassword intentionally omitted (disabled).
208
+ },
172
209
  oAuth: {
173
210
  flows: { authorizationCodeGrant: true },
174
211
  scopes: [aws_cdk_lib_1.aws_cognito.OAuthScope.OPENID, aws_cdk_lib_1.aws_cognito.OAuthScope.EMAIL, aws_cdk_lib_1.aws_cognito.OAuthScope.PROFILE],
@@ -223,4 +260,4 @@ class CognitoCustomerPool extends constructs.Construct {
223
260
  }
224
261
  }
225
262
  exports.CognitoCustomerPool = CognitoCustomerPool;
226
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nbml0b0N1c3RvbWVyUG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbG91ZGZyb250L3BhdHRlcm5zL2NvZ25pdG9DdXN0b21lclBvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQTZCO0FBQzdCLGtEQUFvQztBQUNwQyw2Q0FLcUI7QUFDckIsdURBQXlDO0FBaUt6Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLG1CQUFvQixTQUFRLFVBQVUsQ0FBQyxTQUFTO0lBWTNELFlBQVksS0FBMkIsRUFBRSxFQUFVLEVBQUUsS0FBK0I7UUFDbEYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEtBQUssU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMvRixNQUFNLElBQUksS0FBSyxDQUNiLGtHQUFrRztrQkFDaEcscUhBQXFILENBQ3hILENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FDYiwrRkFBK0Y7a0JBQzdGLHNHQUFzRyxDQUN6RyxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLFdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ25ELE1BQU0sSUFBSSxLQUFLLENBQ2IsaUVB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SSxHQUFHLENBQUMsYUFBYSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDbkUsSUFBSSx5QkFBTyxDQUFDLDJCQUEyQixDQUFDLElBQUksRUFBRSxlQUFlLEVBQUU7b0JBQzdELGNBQWMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUc7b0JBQ3JDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CO29CQUN4RCxXQUFXLEVBQUUsS0FBSztvQkFDbEIsYUFBYSxFQUFFLEdBQUcsQ0FBQyxhQUFhO2lCQUNqQyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXBORCxrREFvTkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY29yZSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQge1xuICBhd3NfY29nbml0byBhcyBjb2duaXRvLFxuICBhd3NfaWFtIGFzIGlhbSxcbiAgYXdzX2ttcyBhcyBrbXMsXG4gIGF3c19sYW1iZGEgYXMgbGFtYmRhLFxufSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBjb25zdHJ1Y3RzIGZyb20gJ2NvbnN0cnVjdHMnO1xuXG50eXBlIEFjY291bnRUYWtlb3ZlclJpc2tDb25maWcgPSBjb2duaXRvLkNmblVzZXJQb29sUmlza0NvbmZpZ3VyYXRpb25BdHRhY2htZW50LkFjY291bnRUYWtlb3ZlclJpc2tDb25maWd1cmF0aW9uVHlwZVByb3BlcnR5O1xudHlwZSBDb21wcm9taXNlZENyZWRlbnRpYWxzUmlza0NvbmZpZyA9IGNvZ25pdG8uQ2ZuVXNlclBvb2xSaXNrQ29uZmlndXJhdGlvbkF0dGFjaG1lbnQuQ29tcHJvbWlzZWRDcmVkZW50aWFsc1Jpc2tDb25maWd1cmF0aW9uVHlwZVByb3BlcnR5O1xuXG4vKipcbiAqIFNwZWNpZmljYXRpb24gZm9yIG9uZSBDb2duaXRvIGFwcCBjbGllbnQgKGUuZy4gb25lIGJyYW5kIG9yIG9uZSBmcm9udC1lbmQpLlxuICogUHVibGljIFNQQSBjbGllbnRzOiBubyBzZWNyZXQsIFBLQ0UgKGF1dGhvcml6YXRpb24tY29kZSBncmFudCksIFNSUC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2duaXRvQXBwQ2xpZW50U3BlYyB7XG4gIC8qKiBMb2dpY2FsIGtleSB1c2VkIGFzIHRoZSBjb25zdHJ1Y3QgaWQgYW5kIHRoZSBrZXkgaW4ge0BsaW5rIENvZ25pdG9DdXN0b21lclBvb2wudXNlclBvb2xDbGllbnRzfS4gKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG4gIC8qKiBPQXV0aDIgY2FsbGJhY2sgVVJMcyBmb3IgdGhpcyBjbGllbnQgKHVzZWQgb25seSBieSB0aGUgc29jaWFsL2hvc3RlZCByZWRpcmVjdCBmbG93KS4gKi9cbiAgcmVhZG9ubHkgY2FsbGJhY2tVcmxzPzogc3RyaW5nW107XG4gIC8qKiBMb2dvdXQgVVJMcyBmb3IgdGhpcyBjbGllbnQuICovXG4gIHJlYWRvbmx5IGxvZ291dFVybHM/OiBzdHJpbmdbXTtcbiAgLyoqIElkZW50aXR5IHByb3ZpZGVycyB0aGlzIGNsaWVudCBzdXBwb3J0cy4gQGRlZmF1bHQgW0NPR05JVE9dICovXG4gIHJlYWRvbmx5IHN1cHBvcnRlZElkZW50aXR5UHJvdmlkZXJzPzogY29nbml0by5Vc2VyUG9vbENsaWVudElkZW50aXR5UHJvdmlkZXJbXTtcbiAgLyoqIEdlbmVyYXRlIGEgY2xpZW50IHNlY3JldC4gQGRlZmF1bHQgZmFsc2UgKHB1YmxpYyBTUEEgY2xpZW50KSAqL1xuICByZWFkb25seSBnZW5lcmF0ZVNlY3JldD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogU2FtZS1hY2NvdW50IFNFUyBlbWFpbCBjb25maWd1cmF0aW9uIGZvciB0aGUgcG9vbC4gU3ludGhlc2lzZXMgYW5cbiAqIGBFbWFpbENvbmZpZ3VyYXRpb25gIHdpdGggYEVtYWlsU2VuZGluZ0FjY291bnQ6IERFVkVMT1BFUmAuIEl0cyBwdXJwb3NlIGlzIHRvXG4gKiBzYXRpc2Z5IENvZ25pdG8ncyBwcmVjb25kaXRpb24gZm9yIGVuYWJsaW5nIEVNQUlMX09UUCBNRkEg4oCUIENvZ25pdG8gcmVxdWlyZXMgYVxuICogdmVyaWZpZWQgc2FtZS1hY2NvdW50IFNFUyBpZGVudGl0eSBvbiB0aGUgcG9vbCBiZWZvcmUgaXQgd2lsbCBhY2NlcHRcbiAqIGBFbmFibGVkTWZhczogWydFTUFJTF9PVFAnXWAsIGluZGVwZW5kZW50bHkgb2YgYW55IGN1c3RvbSBlbWFpbCBzZW5kZXIgdGhhdFxuICogb3ZlcnJpZGVzIGFjdHVhbCBkZWxpdmVyeS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2duaXRvQ3VzdG9tZXJQb29sRW1haWxDb25maWcge1xuICAvKipcbiAgICogQVJOIG9mIGEgVkVSSUZJRUQgU0VTIGlkZW50aXR5IGluIHRoZSBQT09MJ3MgT1dOIGFjY291bnQgKGRvbWFpbiBpZGVudGl0eVxuICAgKiBwcmVmZXJyZWQ7IGEgdmVyaWZpZWQgZW1haWwtYWRkcmVzcyBpZGVudGl0eSBhbHNvIHdvcmtzKS4gUGFzc2VkIHRvIENvZ25pdG8gYXNcbiAgICogdGhlIGBFbWFpbENvbmZpZ3VyYXRpb24uU291cmNlQXJuYC4gTXVzdCBiZSBpbiB0aGUgcG9vbCdzIHJlZ2lvbi5cbiAgICovXG4gIHJlYWRvbmx5IHNlc1ZlcmlmaWVkRG9tYWluQXJuOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgRnJvbSBhZGRyZXNzIGZvciB0aGUgcG9vbCdzIFNFUyBjb25maWd1cmF0aW9uLCBlLmcuXG4gICAqIGAyZmFAYWxwaGEuZnVuY3Rpb25hbHNlbGYuY29tYC4gQSBsb2NhbC1wYXJ0IG9uIHRoZSB2ZXJpZmllZCBpZGVudGl0eSdzIGRvbWFpbi5cbiAgICovXG4gIHJlYWRvbmx5IGZyb21FbWFpbDogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgZGlzcGxheSBuYW1lLCBlLmcuIFwiRnVuY3Rpb25hbCBTZWxmXCIuIEBkZWZhdWx0IC0gYWRkcmVzcyBvbmx5ICovXG4gIHJlYWRvbmx5IGZyb21OYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbmFsIENvZ25pdG8gSWRlbnRpdHkgUG9vbCArIEFCQUMgKGF0dHJpYnV0ZXMtZm9yLWFjY2Vzcy1jb250cm9sKSBjb25maWcuXG4gKiBNYXBzIHRva2VuIGNsYWltcyB0byBwcmluY2lwYWwgdGFncyBzbyBkb3duc3RyZWFtIElBTSBjYW4gc2NvcGUgb24gdGhlbS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2duaXRvSWRlbnRpdHlQb29sQWJhY0NvbmZpZyB7XG4gIC8qKiBBbGxvdyB1bmF1dGhlbnRpY2F0ZWQgKGd1ZXN0KSBpZGVudGl0aWVzLiBAZGVmYXVsdCBmYWxzZSAqL1xuICByZWFkb25seSBhbGxvd1VuYXV0aGVudGljYXRlZElkZW50aXRpZXM/OiBib29sZWFuO1xuICAvKipcbiAgICogQ2xhaW0g4oaSIHByaW5jaXBhbC10YWcgbWFwcGluZywgZS5nLiBgeyBzdWI6ICdjdXN0b21lci1pZCcgfWAuIEFwcGxpZWQgdG8gdGhlXG4gICAqIHVzZXItcG9vbCBwcm92aWRlciBzbyBhdXRoZW50aWNhdGVkIHNlc3Npb25zIGNhcnJ5IHRoZXNlIGFzIGBhd3M6UHJpbmNpcGFsVGFnLypgLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpbmNpcGFsVGFncz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBNYW5hZ2VkIHBvbGljaWVzIGZvciB0aGUgYXV0aGVudGljYXRlZCByb2xlLiBAZGVmYXVsdCBub25lIChhdHRhY2ggeW91ciBvd24pLiAqL1xuICByZWFkb25seSBhdXRoZW50aWNhdGVkUm9sZU1hbmFnZWRQb2xpY2llcz86IGlhbS5JTWFuYWdlZFBvbGljeVtdO1xufVxuXG4vKipcbiAqIFByb3BzIGZvciB7QGxpbmsgQ29nbml0b0N1c3RvbWVyUG9vbH0uIEV2ZXJ5IHZhbHVlIGlzIGdlbmVyaWMg4oCUIG5vXG4gKiBwcm9qZWN0L2JyYW5kL2RvbWFpbiBzcGVjaWZpY3MgYXJlIGJha2VkIGluOyBwYXNzIHRoZW0gaGVyZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2duaXRvQ3VzdG9tZXJQb29sUHJvcHMge1xuICAvKiogVXNlciBwb29sIG5hbWUuICovXG4gIHJlYWRvbmx5IHVzZXJQb29sTmFtZT86IHN0cmluZztcbiAgLyoqIENvZ25pdG8gaG9zdGVkLVVJIGRvbWFpbiBwcmVmaXggKGdsb2JhbGx5IHVuaXF1ZSkuICovXG4gIHJlYWRvbmx5IGNvZ25pdG9Eb21haW5QcmVmaXg6IHN0cmluZztcbiAgLyoqIEFwcCBjbGllbnRzIHRvIGNyZWF0ZSAodHlwaWNhbGx5IG9uZSBwZXIgYnJhbmQvZnJvbnQtZW5kKS4gQXQgbGVhc3Qgb25lLiAqL1xuICByZWFkb25seSBhcHBDbGllbnRzOiBDb2duaXRvQXBwQ2xpZW50U3BlY1tdO1xuICAvKiogRW5hYmxlIHNlbGYtc2VydmljZSBzaWduLXVwLiBAZGVmYXVsdCBmYWxzZSAqL1xuICByZWFkb25seSBzZWxmU2lnblVwRW5hYmxlZD86IGJvb2xlYW47XG4gIC8qKiBNRkEgZW5mb3JjZW1lbnQuIEBkZWZhdWx0IFJFUVVJUkVEICovXG4gIHJlYWRvbmx5IG1mYT86IGNvZ25pdG8uTWZhO1xuICAvKiogU2Vjb25kIGZhY3RvcnMuIEBkZWZhdWx0IHsgb3RwOiB0cnVlLCBzbXM6IGZhbHNlIH0gKi9cbiAgcmVhZG9ubHkgbWZhU2Vjb25kRmFjdG9yPzogY29nbml0by5NZmFTZWNvbmRGYWN0b3I7XG4gIC8qKiBQYXNzd29yZCBwb2xpY3kuIEBkZWZhdWx0IG1pbkxlbmd0aCAxMiwgdXBwZXIvbG93ZXIvZGlnaXRzL3N5bWJvbHMuICovXG4gIHJlYWRvbmx5IHBhc3N3b3JkUG9saWN5PzogY29nbml0by5QYXNzd29yZFBvbGljeTtcbiAgLyoqIEFkdmFuY2VkIHNlY3VyaXR5IG1vZGUgKHRocmVhdCBwcm90ZWN0aW9uKS4gQGRlZmF1bHQgT0ZGICovXG4gIHJlYWRvbmx5IGFkdmFuY2VkU2VjdXJpdHlNb2RlPzogY29nbml0by5BZHZhbmNlZFNlY3VyaXR5TW9kZTtcbiAgLyoqIFN0YW5kYXJkIGF0dHJpYnV0ZXMgY29uZmlnLiAqL1xuICByZWFkb25seSBzdGFuZGFyZEF0dHJpYnV0ZXM/OiBjb2duaXRvLlN0YW5kYXJkQXR0cmlidXRlcztcbiAgLyoqIEN1c3RvbSBhdHRyaWJ1dGVzLiAqL1xuICByZWFkb25seSBjdXN0b21BdHRyaWJ1dGVzPzogeyBba2V5OiBzdHJpbmddOiBjb2duaXRvLklDdXN0b21BdHRyaWJ1dGUgfTtcbiAgLyoqIEVuYWJsZSB0aGUgQ1VTVE9NX0FVVEggZmxvdyBvbiBhcHAgY2xpZW50cy4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgcmVhZG9ubHkgZW5hYmxlQ3VzdG9tQXV0aEZsb3c/OiBib29sZWFuO1xuICAvKiogQWNjZXNzIHRva2VuIHZhbGlkaXR5LiBAZGVmYXVsdCAxIGhvdXIgKi9cbiAgcmVhZG9ubHkgYWNjZXNzVG9rZW5WYWxpZGl0eT86IGNvcmUuRHVyYXRpb247XG4gIC8qKiBJRCB0b2tlbiB2YWxpZGl0eS4gQGRlZmF1bHQgMSBob3VyICovXG4gIHJlYWRvbmx5IGlkVG9rZW5WYWxpZGl0eT86IGNvcmUuRHVyYXRpb247XG4gIC8qKiBSZWZyZXNoIHRva2VuIHZhbGlkaXR5LiBAZGVmYXVsdCAzMCBkYXlzICovXG4gIHJlYWRvbmx5IHJlZnJlc2hUb2tlblZhbGlkaXR5PzogY29yZS5EdXJhdGlvbjtcbiAgLyoqIENvZ25pdG8gZ3JvdXBzIHRvIGNyZWF0ZS4gKi9cbiAgcmVhZG9ubHkgZ3JvdXBzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBQcmUtdG9rZW4tZ2VuZXJhdGlvbiBMYW1iZGEgKFYyKS4gQGRlZmF1bHQgYSBidW5kbGVkIG5vLW9wIGxpYnJhcnkgTGFtYmRhIGlzXG4gICAqIGNyZWF0ZWQuIFBhc3MgeW91ciBvd24gdG8gY3VzdG9taXNlIGVtaXR0ZWQgY2xhaW1zLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlVG9rZW5HZW5lcmF0aW9uTGFtYmRhPzogbGFtYmRhLklGdW5jdGlvbjtcbiAgLyoqXG4gICAqIEVuYWJsZSBlbWFpbCBvbmUtdGltZS1wYXNzd29yZCAoYEVNQUlMX09UUGApIGFzIHRoZSBNRkEgc2Vjb25kIGZhY3RvciwgZGVsaXZlcmVkXG4gICAqIGJ5IHtAbGluayBjdXN0b21FbWFpbFNlbmRlckxhbWJkYX0uIFRoaXMgaXMgc2V0IHZpYSBhbiBMMSBvdmVycmlkZSBvbiB0aGVcbiAgICogdW5kZXJseWluZyBgQ2ZuVXNlclBvb2xgIChgRW5hYmxlZE1mYXM6IFsnRU1BSUxfT1RQJ11gKSByYXRoZXIgdGhhblxuICAgKiBgbWZhU2Vjb25kRmFjdG9yLmVtYWlsYCwgYmVjYXVzZSB0aGUgQ0RLIEwyIHJlcXVpcmVzIGEgbWFuYWdlZCAoYERFVkVMT1BFUmApIFNFU1xuICAgKiBgZW1haWxgIGNvbmZpZyBmb3IgYG1mYVNlY29uZEZhY3Rvci5lbWFpbGAg4oCUIHdoaWNoIGlzIGluY29tcGF0aWJsZSB3aXRoIGFcbiAgICogY3VzdG9tLWVtYWlsLXNlbmRlci1vbmx5IGRlbGl2ZXJ5IHBhdGguIFJlcXVpcmVzIHtAbGluayBjdXN0b21FbWFpbFNlbmRlckxhbWJkYX1cbiAgICogYW5kIHtAbGluayBjdXN0b21TZW5kZXJLbXNLZXl9LCBhbmQgYSBwb29sIGZlYXR1cmUgcGxhbiBvZiBFc3NlbnRpYWxzIG9yIGhpZ2hlci5cbiAgICogV2hlbiB0cnVlLCBhbnkgYG90cGAvYHNtc2AgaW4ge0BsaW5rIG1mYVNlY29uZEZhY3Rvcn0gaXMgaWdub3JlZCDigJQgRU1BSUxfT1RQIGlzXG4gICAqIHRoZSBzb2xlIGZhY3Rvci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGVtYWlsT3RwTWZhPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEN1c3RvbSBFbWFpbCBTZW5kZXIgTGFtYmRhLiBXaGVuIHNldCAodG9nZXRoZXIgd2l0aCB7QGxpbmsgY3VzdG9tU2VuZGVyS21zS2V5fSksXG4gICAqIGl0IGlzIHdpcmVkIHRvIHRoZSBwb29sIHZpYSB0aGUgYENVU1RPTV9FTUFJTF9TRU5ERVJgIHRyaWdnZXIgYW5kIENvZ25pdG9cbiAgICogZGVsaXZlcnMgYWxsIGN1c3RvbWVyIGVtYWlscyAoTUZBIGNvZGVzLCB2ZXJpZmljYXRpb24sIHRlbXBvcmFyeSBwYXNzd29yZHMpXG4gICAqIHRocm91Z2ggdGhpcyBMYW1iZGEgaW5zdGVhZCBvZiBpdHMgZGVmYXVsdCBzZW5kZXIgb3IgYSBtYW5hZ2VkIFNFUyBzZW5kZXIuXG4gICAqIENvZ25pdG8gZW5jcnlwdHMgZWFjaCBjb2RlIHRvIHtAbGluayBjdXN0b21TZW5kZXJLbXNLZXl9OyB0aGUgTGFtYmRhIGRlY3J5cHRzXG4gICAqIGl0IHdpdGggdGhlIEFXUyBFbmNyeXB0aW9uIFNESyBiZWZvcmUgc2VuZGluZy4gUmVxdWlyZXMge0BsaW5rIGN1c3RvbVNlbmRlckttc0tleX0uXG4gICAqIEBkZWZhdWx0IC0gQ29nbml0bydzIGRlZmF1bHQgZW1haWwgZGVsaXZlcnlcbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbUVtYWlsU2VuZGVyTGFtYmRhPzogbGFtYmRhLklGdW5jdGlvbjtcbiAgLyoqXG4gICAqIFN5bW1ldHJpYyBLTVMga2V5IENvZ25pdG8gdXNlcyB0byBlbmNyeXB0IGNvZGVzIGZvciB7QGxpbmsgY3VzdG9tRW1haWxTZW5kZXJMYW1iZGF9LlxuICAgKiBSZXF1aXJlZCB3aGVuIGEgY3VzdG9tIGVtYWlsIHNlbmRlciBpcyBwcm92aWRlZDsgaWdub3JlZCBvdGhlcndpc2UuIENvZ25pdG8gaXNcbiAgICogZ3JhbnRlZCBlbmNyeXB0L2RlY3J5cHQgb24gaXQ7IHRoZSBMYW1iZGEgbXVzdCBiZSBzZXBhcmF0ZWx5IGdyYW50ZWQgZGVjcnlwdC5cbiAgICogQGRlZmF1bHQgLSBubyBrZXkgKG9ubHkgdmFsaWQgd2hlbiBubyBjdXN0b20gZW1haWwgc2VuZGVyIGlzIHNldClcbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbVNlbmRlckttc0tleT86IGttcy5JS2V5O1xuICAvKipcbiAgICogU2FtZS1hY2NvdW50IFNFUyBlbWFpbCBjb25maWd1cmF0aW9uIGZvciB0aGUgcG9vbC4gUkVRVUlSRUQgd2hlblxuICAgKiB7QGxpbmsgZW1haWxPdHBNZmF9IGlzIHNldDogQ29nbml0byByZWZ1c2VzIHRvIGVuYWJsZSBFTUFJTF9PVFAgTUZBIHVubGVzcyB0aGVcbiAgICogcG9vbCBjYXJyaWVzIGFuIGBFbWFpbFNlbmRpbmdBY2NvdW50OiBERVZFTE9QRVJgIGNvbmZpZ3VyYXRpb24gcG9pbnRpbmcgYXQgYVxuICAgKiBWRVJJRklFRCBTRVMgaWRlbnRpdHkgaW4gdGhlIHBvb2wncyBPV04gYWNjb3VudCDigJQgdGhpcyBwcmVjb25kaXRpb24gaXMgdmFsaWRhdGVkXG4gICAqIGF0IHRoZSBwb29sLWNvbmZpZyBsYXllciwgQkVGT1JFIGFueSBlbWFpbCBpcyByb3V0ZWQsIHNvIGFcbiAgICoge0BsaW5rIGN1c3RvbUVtYWlsU2VuZGVyTGFtYmRhfSAod2hpY2ggb3ZlcnJpZGVzIGRlbGl2ZXJ5KSBkb2VzIG5vdCBzYXRpc2Z5IGl0LlxuICAgKlxuICAgKiBUaGUgaWRlbnRpdHkgaGVyZSBleGlzdHMgb25seSB0byBzYXRpc2Z5IHRoYXQgZW5hYmxlbWVudCBwcmVjb25kaXRpb247IHdoZW4gYVxuICAgKiBjdXN0b20gZW1haWwgc2VuZGVyIGlzIGF0dGFjaGVkLCBDb2duaXRvIG5ldmVyIGFjdHVhbGx5IHNlbmRzIHRocm91Z2ggdGhpc1xuICAgKiBpZGVudGl0eSAodGhlIExhbWJkYSBpbnRlcmNlcHRzIGV2ZXJ5IGVtYWlsKSwgc28gYSBjcm9zcy1hY2NvdW50IG9yXG4gICAqIFNFUy1zYW5kYm94IGRlbGl2ZXJ5IHBhdGggaXMgdW5hZmZlY3RlZC4gUHJlZmVyIGEgdmVyaWZpZWQgRE9NQUlOIGlkZW50aXR5O1xuICAgKiBhIHZlcmlmaWVkIGVtYWlsLWFkZHJlc3MgaWRlbnRpdHkgYWxzbyB3b3JrcyBpZiBDb2duaXRvIHJlamVjdHMgdGhlIGRvbWFpbiBmb3JtLlxuICAgKiBAZGVmYXVsdCAtIG5vIFNFUyBjb25maWcgKENvZ25pdG8gZGVmYXVsdCBzZW5kZXI7IG5vdCB2YWxpZCB3aXRoIGVtYWlsT3RwTWZhKVxuICAgKi9cbiAgcmVhZG9ubHkgZW1haWxDb25maWd1cmF0aW9uPzogQ29nbml0b0N1c3RvbWVyUG9vbEVtYWlsQ29uZmlnO1xuICAvKipcbiAgICogTDEgYWNjb3VudC10YWtlb3ZlciByaXNrIGNvbmZpZ3VyYXRpb24gKHJlcXVpcmVzIHtAbGluayBhZHZhbmNlZFNlY3VyaXR5TW9kZX1cbiAgICogRU5GT1JDRUQvQVVESVQpLiBQYXNzZWQgdGhyb3VnaCB0byBDZm5Vc2VyUG9vbFJpc2tDb25maWd1cmF0aW9uQXR0YWNobWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnRUYWtlb3ZlclJpc2tDb25maWd1cmF0aW9uPzogQWNjb3VudFRha2VvdmVyUmlza0NvbmZpZztcbiAgLyoqIEwxIGNvbXByb21pc2VkLWNyZWRlbnRpYWxzIHJpc2sgY29uZmlndXJhdGlvbi4gKi9cbiAgcmVhZG9ubHkgY29tcHJvbWlzZWRDcmVkZW50aWFsc1Jpc2tDb25maWd1cmF0aW9uPzogQ29tcHJvbWlzZWRDcmVkZW50aWFsc1Jpc2tDb25maWc7XG4gIC8qKiBPcHRpb25hbCBpZGVudGl0eSBwb29sICsgQUJBQyBjb25maWd1cmF0aW9uLiAqL1xuICByZWFkb25seSBpZGVudGl0eVBvb2w/OiBDb2duaXRvSWRlbnRpdHlQb29sQWJhY0NvbmZpZztcbiAgLyoqIFJlbW92YWwgcG9saWN5IGZvciB0aGUgcG9vbC4gQGRlZmF1bHQgUkVUQUlOICovXG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k/OiBjb3JlLlJlbW92YWxQb2xpY3k7XG59XG5cbi8qKlxuICogQSBnZW5lcmljLCByZXVzYWJsZSBzZWN1cmUgQ29nbml0byAqKmN1c3RvbWVyKiogdXNlciBwb29sIGZvciB0aGUgY3VzdG9tLVVJXG4gKiAoY2xpZW50LXNpZGUgU1JQKSBhdXRoZW50aWNhdGlvbiBwYXR0ZXJuOiBwdWJsaWMgUEtDRSBhcHAgY2xpZW50cywgTUZBLFxuICogc3Ryb25nIHBhc3N3b3JkIHBvbGljeSwgb3B0aW9uYWwgYWR2YW5jZWQtc2VjdXJpdHkgdGhyZWF0IHByb3RlY3Rpb24sXG4gKiBwZXItY2xpZW50IChwZXItYnJhbmQpIGFwcCBjbGllbnRzLCBhbmQgYW4gb3B0aW9uYWwgaWRlbnRpdHkgcG9vbCB3aXRoIEFCQUMuXG4gKlxuICogUHJvdmlzaW9ucyBPTkxZIHRoZSBpZGVudGl0eSBwcm92aWRlci4gSXQga25vd3Mgbm90aGluZyBhYm91dCBDbG91ZEZyb250LFxuICogc2Vzc2lvbnMsIG9yIGFueSBzcGVjaWZpYyBwcm9qZWN0IOKAlCBwYWlyIGl0IHdpdGggYENvZ25pdG9TZXNzaW9uQmFja2VuZGBcbiAqIChzZXNzaW9uIHN1YnN0cmF0ZSkgYW5kIGBDb2duaXRvQ3VzdG9tVWlBdXRoYCAoZWRnZS9DRE4pLlxuICovXG5leHBvcnQgY2xhc3MgQ29nbml0b0N1c3RvbWVyUG9vbCBleHRlbmRzIGNvbnN0cnVjdHMuQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHVzZXJQb29sOiBjb2duaXRvLlVzZXJQb29sO1xuICAvKiogQXBwIGNsaWVudHMga2V5ZWQgYnkge0BsaW5rIENvZ25pdG9BcHBDbGllbnRTcGVjLmtleX0uICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyUG9vbENsaWVudHM6IFJlY29yZDxzdHJpbmcsIGNvZ25pdG8uVXNlclBvb2xDbGllbnQ+O1xuICAvKiogVGhlIGZpcnN0IGFwcCBjbGllbnQsIGZvciBjb252ZW5pZW5jZS4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHVzZXJQb29sQ2xpZW50OiBjb2duaXRvLlVzZXJQb29sQ2xpZW50O1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlclBvb2xEb21haW46IGNvZ25pdG8uVXNlclBvb2xEb21haW47XG4gIC8qKiBIb3N0ZWQtVUkgZG9tYWluIFVSTCwgZS5nLiBgPHByZWZpeD4uYXV0aC48cmVnaW9uPi5hbWF6b25jb2duaXRvLmNvbWAuICovXG4gIHB1YmxpYyByZWFkb25seSBjb2duaXRvRG9tYWluVXJsOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBpZGVudGl0eVBvb2w/OiBjb2duaXRvLkNmbklkZW50aXR5UG9vbDtcbiAgcHVibGljIHJlYWRvbmx5IGF1dGhlbnRpY2F0ZWRSb2xlPzogaWFtLlJvbGU7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ29nbml0b0N1c3RvbWVyUG9vbFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGlmICghcHJvcHMuYXBwQ2xpZW50cyB8fCBwcm9wcy5hcHBDbGllbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2duaXRvQ3VzdG9tZXJQb29sIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcHAgY2xpZW50Jyk7XG4gICAgfVxuXG4gICAgaWYgKChwcm9wcy5jdXN0b21FbWFpbFNlbmRlckxhbWJkYSA9PT0gdW5kZWZpbmVkKSAhPT0gKHByb3BzLmN1c3RvbVNlbmRlckttc0tleSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ29nbml0b0N1c3RvbWVyUG9vbDogY3VzdG9tRW1haWxTZW5kZXJMYW1iZGEgYW5kIGN1c3RvbVNlbmRlckttc0tleSBtdXN0IGJlIHByb3ZpZGVkIHRvZ2V0aGVyIOKAlCAnXG4gICAgICAgICsgJ2EgY3VzdG9tIGVtYWlsIHNlbmRlciByZXF1aXJlcyBhIEtNUyBrZXkgZm9yIENvZ25pdG8gdG8gZW5jcnlwdCBjb2RlcyB0bywgYW5kIHRoZSBrZXkgaXMgdW51c2VkIHdpdGhvdXQgdGhlIExhbWJkYS4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZW1haWxPdHBNZmEgJiYgIXByb3BzLmN1c3RvbUVtYWlsU2VuZGVyTGFtYmRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDb2duaXRvQ3VzdG9tZXJQb29sOiBlbWFpbE90cE1mYSByZXF1aXJlcyBjdXN0b21FbWFpbFNlbmRlckxhbWJkYSAoYW5kIGN1c3RvbVNlbmRlckttc0tleSkg4oCUICdcbiAgICAgICAgKyAnRU1BSUxfT1RQIGNvZGVzIGFyZSBkZWxpdmVyZWQgYnkgdGhlIGN1c3RvbSBlbWFpbCBzZW5kZXIsIHNvIGVtYWlsIE1GQSBjYW5ub3QgYmUgZW5hYmxlZCB3aXRob3V0IGl0LicsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5lbWFpbE90cE1mYSAmJiAhcHJvcHMuZW1haWxDb25maWd1cmF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDb2duaXRvQ3VzdG9tZXJQb29sOiBlbWFpbE90cE1mYSByZXF1aXJlcyBlbWFpbENvbmZpZ3VyYXRpb24g4oCUICdcbiAgICAgICAgKyAnQ29nbml0byByZWZ1c2VzIHRvIGVuYWJsZSBFTUFJTF9PVFAgTUZBIHVubGVzcyB0aGUgcG9vbCBjYXJyaWVzIGEgREVWRUxPUEVSIFNFUyAnXG4gICAgICAgICsgJ0VtYWlsQ29uZmlndXJhdGlvbiBvbiBhIHZlcmlmaWVkIHNhbWUtYWNjb3VudCBpZGVudGl0eS4gVGhpcyBwcmVjb25kaXRpb24gaXMgY2hlY2tlZCAnXG4gICAgICAgICsgJ2JlZm9yZSBhbnkgZW1haWwgaXMgcm91dGVkLCBzbyB0aGUgY3VzdG9tIGVtYWlsIHNlbmRlciBkb2VzIG5vdCBzYXRpc2Z5IGl0LicsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFdpdGggZW1haWxPdHBNZmEsIEVNQUlMX09UUCBpcyB0aGUgc29sZSBmYWN0b3IgYW5kIGlzIGFwcGxpZWQgdmlhIGFuIEwxXG4gICAgLy8gb3ZlcnJpZGUgYmVsb3c7IGRvIE5PVCBwYXNzIG1mYVNlY29uZEZhY3Rvci5lbWFpbCB0byB0aGUgTDIgKGl0cyB2YWxpZGF0ZUVtYWlsTWZhXG4gICAgLy8gZGVtYW5kcyBhIGBlbWFpbGAgVXNlclBvb2xFbWFpbCBiZSBzZXQsIHdoaWNoIHdlIHN1cHBseSBzZXBhcmF0ZWx5IHZpYVxuICAgIC8vIGVtYWlsQ29uZmlndXJhdGlvbiDigJQgc2VlIHRoZSBgZW1haWxgIHByb3AgYmVsb3cpLlxuICAgIGNvbnN0IGwyTWZhU2Vjb25kRmFjdG9yID0gcHJvcHMuZW1haWxPdHBNZmFcbiAgICAgID8geyBvdHA6IGZhbHNlLCBzbXM6IGZhbHNlIH1cbiAgICAgIDogKHByb3BzLm1mYVNlY29uZEZhY3RvciA/PyB7IG90cDogdHJ1ZSwgc21zOiBmYWxzZSB9KTtcblxuICAgIGNvbnN0IGFjY291bnRSZWNvdmVyeSA9IHByb3BzLmVtYWlsT3RwTWZhXG4gICAgLy8gQ29nbml0byByZWplY3RzIEVtYWlsTWZhQ29uZmlndXJhdGlvbiB1bmxlc3MgQWNjb3VudFJlY292ZXJ5U2V0dGluZyBoYXMgYXRcbiAgICAvLyBsZWFzdCBvbmUgbWVjaGFuaXNtIG90aGVyIHRoYW4gdmVyaWZpZWRfZW1haWwgKHJlY292ZXJpbmcgZW1haWwtYmFzZWQgTUZBIHZpYVxuICAgIC8vIGVtYWlsIGlzIGNpcmN1bGFyKS4gQWNjb3VudFJlY292ZXJ5Lk5PTkUgbWFwcyB0byB0aGUgYWRtaW5fb25seSBtZWNoYW5pc20sIHdoaWNoXG4gICAgLy8gc2F0aXNmaWVzIHRoZSBjb25zdHJhaW50IHdpdGhvdXQgaW50cm9kdWNpbmcgYW4gU01TL3Bob25lIGZhY3RvciBpbnRvIHRoaXNcbiAgICAvLyBwYXNzd29yZGxlc3MtZW1haWwgZGVzaWduLiBPdGhlcndpc2Uga2VlcCB0aGUgZW1haWwtb25seSBkZWZhdWx0LlxuICAgICAgPyBjb2duaXRvLkFjY291bnRSZWNvdmVyeS5OT05FXG4gICAgICA6IGNvZ25pdG8uQWNjb3VudFJlY292ZXJ5LkVNQUlMX09OTFk7XG5cbiAgICB0aGlzLnVzZXJQb29sID0gbmV3IGNvZ25pdG8uVXNlclBvb2wodGhpcywgJ1VzZXJQb29sJywge1xuICAgICAgdXNlclBvb2xOYW1lOiBwcm9wcy51c2VyUG9vbE5hbWUsXG4gICAgICBzZWxmU2lnblVwRW5hYmxlZDogcHJvcHMuc2VsZlNpZ25VcEVuYWJsZWQgPz8gZmFsc2UsXG4gICAgICBzaWduSW5BbGlhc2VzOiB7IGVtYWlsOiB0cnVlIH0sXG4gICAgICBzaWduSW5DYXNlU2Vuc2l0aXZlOiBmYWxzZSxcbiAgICAgIG1mYTogcHJvcHMubWZhID8/IGNvZ25pdG8uTWZhLlJFUVVJUkVELFxuICAgICAgbWZhU2Vjb25kRmFjdG9yOiBsMk1mYVNlY29uZEZhY3RvcixcbiAgICAgIHBhc3N3b3JkUG9saWN5OiBwcm9wcy5wYXNzd29yZFBvbGljeSA/PyB7XG4gICAgICAgIG1pbkxlbmd0aDogMTIsXG4gICAgICAgIHJlcXVpcmVMb3dlcmNhc2U6IHRydWUsXG4gICAgICAgIHJlcXVpcmVVcHBlcmNhc2U6IHRydWUsXG4gICAgICAgIHJlcXVpcmVEaWdpdHM6IHRydWUsXG4gICAgICAgIHJlcXVpcmVTeW1ib2xzOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGFkdmFuY2VkU2VjdXJpdHlNb2RlOiBwcm9wcy5hZHZhbmNlZFNlY3VyaXR5TW9kZSA/PyBjb2duaXRvLkFkdmFuY2VkU2VjdXJpdHlNb2RlLk9GRixcbiAgICAgIHN0YW5kYXJkQXR0cmlidXRlczogcHJvcHMuc3RhbmRhcmRBdHRyaWJ1dGVzLFxuICAgICAgY3VzdG9tQXR0cmlidXRlczogcHJvcHMuY3VzdG9tQXR0cmlidXRlcyxcbiAgICAgIGF1dG9WZXJpZnk6IHsgZW1haWw6IHRydWUgfSxcbiAgICAgIGFjY291bnRSZWNvdmVyeSxcbiAgICAgIC8vIEN1c3RvbSBFbWFpbCBTZW5kZXI6IHdoZW4gcHJvdmlkZWQsIENvZ25pdG8gcm91dGVzIGV2ZXJ5IGN1c3RvbWVyIGVtYWlsXG4gICAgICAvLyB0aHJvdWdoIHRoaXMgTGFtYmRhIGFuZCBlbmNyeXB0cyBjb2RlcyB0byBjdXN0b21TZW5kZXJLbXNLZXkuIEJvdGggbXVzdCBiZVxuICAgICAgLy8gc2V0IG9uIHRoZSBwb29sIGF0IGNvbnN0cnVjdGlvbiDigJQgdGhlIEtNUyBrZXkgaXMgbm90IHNldHRhYmxlIHZpYSBhZGRUcmlnZ2VyLlxuICAgICAgY3VzdG9tU2VuZGVyS21zS2V5OiBwcm9wcy5jdXN0b21TZW5kZXJLbXNLZXksXG4gICAgICBsYW1iZGFUcmlnZ2VyczogcHJvcHMuY3VzdG9tRW1haWxTZW5kZXJMYW1iZGFcbiAgICAgICAgPyB7IGN1c3RvbUVtYWlsU2VuZGVyOiBwcm9wcy5jdXN0b21FbWFpbFNlbmRlckxhbWJkYSB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeSA/PyBjb3JlLlJlbW92YWxQb2xpY3kuUkVUQUlOLFxuICAgIH0pO1xuXG4gICAgLy8gTDEgZXNjYXBlIGhhdGNoOiBlbmFibGUgRU1BSUxfT1RQIGFzIHRoZSBvbmx5IE1GQSBmYWN0b3IuIFRoZSBMMiBjYW5ub3QgZXhwcmVzc1xuICAgIC8vIFwiZW1haWwgTUZBIGRlbGl2ZXJlZCBzb2xlbHkgYnkgYSBjdXN0b20gc2VuZGVyXCIgKHNlZSBlbWFpbE90cE1mYSBkb2NzKSwgc28gc2V0XG4gICAgLy8gRW5hYmxlZE1mYXMgZGlyZWN0bHkgb24gdGhlIHVuZGVybHlpbmcgQ2ZuVXNlclBvb2wuIFRoZSBjdXN0b20gZW1haWwgc2VuZGVyXG4gICAgLy8gZGVsaXZlcnMgdGhlIGNvZGUsIGJ1dCBDb2duaXRvIHN0aWxsIHJlcXVpcmVzIGEgREVWRUxPUEVSIFNFUyBFbWFpbENvbmZpZ3VyYXRpb25cbiAgICAvLyBvbiBhIHZlcmlmaWVkIHNhbWUtYWNjb3VudCBpZGVudGl0eSBhcyBhbiBFTkFCTEVNRU5UIHByZWNvbmRpdGlvbiAoYmVsb3cpLlxuICAgIGlmIChwcm9wcy5lbWFpbENvbmZpZ3VyYXRpb24pIHtcbiAgICAgIC8vIFNldCBFbWFpbENvbmZpZ3VyYXRpb24gdmlhIEwxIHdpdGggdGhlIGNhbGxlcidzIGV4YWN0IHZlcmlmaWVkIHNhbWUtYWNjb3VudFxuICAgICAgLy8gaWRlbnRpdHkgQVJOIOKAlCBhY2NlcHRpbmcgZWl0aGVyIGEgZG9tYWluIG9yIGFuIGVtYWlsLWFkZHJlc3MgaWRlbnRpdHkgd2l0aG91dFxuICAgICAgLy8gQ0RLIHJlLWRlcml2aW5nIHRoZSBBUk4gZnJvbSB0aGUgRnJvbSBhZGRyZXNzLiBUaGlzIHNhdGlzZmllcyBDb2duaXRvJ3NcbiAgICAgIC8vIEVNQUlMX09UUCBlbmFibGVtZW50IHByZWNvbmRpdGlvbjsgdGhlIGN1c3RvbSBlbWFpbCBzZW5kZXIgc3RpbGwgb3ZlcnJpZGVzXG4gICAgICAvLyBhY3R1YWwgZGVsaXZlcnksIHNvIHRoaXMgaWRlbnRpdHkgaXMgbmV2ZXIgc2VudCB0aHJvdWdoLlxuICAgICAgY29uc3QgY2ZuUG9vbCA9IHRoaXMudXNlclBvb2wubm9kZS5kZWZhdWx0Q2hpbGQgYXMgY29nbml0by5DZm5Vc2VyUG9vbDtcbiAgICAgIGNmblBvb2wuZW1haWxDb25maWd1cmF0aW9uID0ge1xuICAgICAgICBlbWFpbFNlbmRpbmdBY2NvdW50OiAnREVWRUxPUEVSJyxcbiAgICAgICAgc291cmNlQXJuOiBwcm9wcy5lbWFpbENvbmZpZ3VyYXRpb24uc2VzVmVyaWZpZWREb21haW5Bcm4sXG4gICAgICAgIGZyb206IHByb3BzLmVtYWlsQ29uZmlndXJhdGlvbi5mcm9tTmFtZVxuICAgICAgICAgID8gYCR7cHJvcHMuZW1haWxDb25maWd1cmF0aW9uLmZyb21OYW1lfSA8JHtwcm9wcy5lbWFpbENvbmZpZ3VyYXRpb24uZnJvbUVtYWlsfT5gXG4gICAgICAgICAgOiBwcm9wcy5lbWFpbENvbmZpZ3VyYXRpb24uZnJvbUVtYWlsLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZW1haWxPdHBNZmEpIHtcbiAgICAgIGNvbnN0IGNmblBvb2wgPSB0aGlzLnVzZXJQb29sLm5vZGUuZGVmYXVsdENoaWxkIGFzIGNvZ25pdG8uQ2ZuVXNlclBvb2w7XG4gICAgICBjZm5Qb29sLmVuYWJsZWRNZmFzID0gWydFTUFJTF9PVFAnXTtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVUb2tlbkxhbWJkYSA9IHByb3BzLnByZVRva2VuR2VuZXJhdGlvbkxhbWJkYSA/PyBuZXcgbGFtYmRhLkZ1bmN0aW9uKHRoaXMsICdQcmVUb2tlbkxhbWJkYScsIHtcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9sYW1iZGEvcHJlLXRva2VuJykpLFxuICAgICAgdGltZW91dDogY29yZS5EdXJhdGlvbi5zZWNvbmRzKDUpLFxuICAgIH0pO1xuICAgIHRoaXMudXNlclBvb2wuYWRkVHJpZ2dlcihjb2duaXRvLlVzZXJQb29sT3BlcmF0aW9uLlBSRV9UT0tFTl9HRU5FUkFUSU9OX0NPTkZJRywgcHJlVG9rZW5MYW1iZGEsIGNvZ25pdG8uTGFtYmRhVmVyc2lvbi5WMl8wKTtcblxuICAgIGlmIChwcm9wcy5ncm91cHMpIHtcbiAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgcHJvcHMuZ3JvdXBzKSB7XG4gICAgICAgIG5ldyBjb2duaXRvLkNmblVzZXJQb29sR3JvdXAodGhpcywgYEdyb3VwJHtncm91cH1gLCB7XG4gICAgICAgICAgdXNlclBvb2xJZDogdGhpcy51c2VyUG9vbC51c2VyUG9vbElkLFxuICAgICAgICAgIGdyb3VwTmFtZTogZ3JvdXAsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9wdGlvbmFsIGFkdmFuY2VkLXNlY3VyaXR5IHJpc2sgY29uZmlndXJhdGlvbiAoTDEpLlxuICAgIGlmIChwcm9wcy5hY2NvdW50VGFrZW92ZXJSaXNrQ29uZmlndXJhdGlvbiB8fCBwcm9wcy5jb21wcm9taXNlZENyZWRlbnRpYWxzUmlza0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgIG5ldyBjb2duaXRvLkNmblVzZXJQb29sUmlza0NvbmZpZ3VyYXRpb25BdHRhY2htZW50KHRoaXMsICdSaXNrQ29uZmlnJywge1xuICAgICAgICB1c2VyUG9vbElkOiB0aGlzLnVzZXJQb29sLnVzZXJQb29sSWQsXG4gICAgICAgIGNsaWVudElkOiAnQUxMJyxcbiAgICAgICAgYWNjb3VudFRha2VvdmVyUmlza0NvbmZpZ3VyYXRpb246IHByb3BzLmFjY291bnRUYWtlb3ZlclJpc2tDb25maWd1cmF0aW9uLFxuICAgICAgICBjb21wcm9taXNlZENyZWRlbnRpYWxzUmlza0NvbmZpZ3VyYXRpb246IHByb3BzLmNvbXByb21pc2VkQ3JlZGVudGlhbHNSaXNrQ29uZmlndXJhdGlvbixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMudXNlclBvb2xDbGllbnRzID0ge307XG4gICAgZm9yIChjb25zdCBzcGVjIG9mIHByb3BzLmFwcENsaWVudHMpIHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IG5ldyBjb2duaXRvLlVzZXJQb29sQ2xpZW50KHRoaXMsIGBDbGllbnQke3NwZWMua2V5fWAsIHtcbiAgICAgICAgdXNlclBvb2w6IHRoaXMudXNlclBvb2wsXG4gICAgICAgIGdlbmVyYXRlU2VjcmV0OiBzcGVjLmdlbmVyYXRlU2VjcmV0ID8/IGZhbHNlLFxuICAgICAgICBhdXRoRmxvd3M6IHtcbiAgICAgICAgICB1c2VyU3JwOiB0cnVlLFxuICAgICAgICAgIGN1c3RvbTogcHJvcHMuZW5hYmxlQ3VzdG9tQXV0aEZsb3cgPz8gZmFsc2UsXG4gICAgICAgICAgLy8gdXNlclBhc3N3b3JkIC8gYWRtaW5Vc2VyUGFzc3dvcmQgaW50ZW50aW9uYWxseSBvbWl0dGVkIChkaXNhYmxlZCkuXG4gICAgICAgIH0sXG4gICAgICAgIG9BdXRoOiB7XG4gICAgICAgICAgZmxvd3M6IHsgYXV0aG9yaXphdGlvbkNvZGVHcmFudDogdHJ1ZSB9LFxuICAgICAgICAgIHNjb3BlczogW2NvZ25pdG8uT0F1dGhTY29wZS5PUEVOSUQsIGNvZ25pdG8uT0F1dGhTY29wZS5FTUFJTCwgY29nbml0by5PQXV0aFNjb3BlLlBST0ZJTEVdLFxuICAgICAgICAgIGNhbGxiYWNrVXJsczogc3BlYy5jYWxsYmFja1VybHMsXG4gICAgICAgICAgbG9nb3V0VXJsczogc3BlYy5sb2dvdXRVcmxzLFxuICAgICAgICB9LFxuICAgICAgICBzdXBwb3J0ZWRJZGVudGl0eVByb3ZpZGVyczogc3BlYy5zdXBwb3J0ZWRJZGVudGl0eVByb3ZpZGVycyA/PyBbY29nbml0by5Vc2VyUG9vbENsaWVudElkZW50aXR5UHJvdmlkZXIuQ09HTklUT10sXG4gICAgICAgIHByZXZlbnRVc2VyRXhpc3RlbmNlRXJyb3JzOiB0cnVlLFxuICAgICAgICBlbmFibGVUb2tlblJldm9jYXRpb246IHRydWUsXG4gICAgICAgIGFjY2Vzc1Rva2VuVmFsaWRpdHk6IHByb3BzLmFjY2Vzc1Rva2VuVmFsaWRpdHkgPz8gY29yZS5EdXJhdGlvbi5ob3VycygxKSxcbiAgICAgICAgaWRUb2tlblZhbGlkaXR5OiBwcm9wcy5pZFRva2VuVmFsaWRpdHkgPz8gY29yZS5EdXJhdGlvbi5ob3VycygxKSxcbiAgICAgICAgcmVmcmVzaFRva2VuVmFsaWRpdHk6IHByb3BzLnJlZnJlc2hUb2tlblZhbGlkaXR5ID8/IGNvcmUuRHVyYXRpb24uZGF5cygzMCksXG4gICAgICB9KTtcbiAgICAgIHRoaXMudXNlclBvb2xDbGllbnRzW3NwZWMua2V5XSA9IGNsaWVudDtcbiAgICB9XG4gICAgdGhpcy51c2VyUG9vbENsaWVudCA9IHRoaXMudXNlclBvb2xDbGllbnRzW3Byb3BzLmFwcENsaWVudHNbMF0ua2V5XTtcblxuICAgIHRoaXMudXNlclBvb2xEb21haW4gPSB0aGlzLnVzZXJQb29sLmFkZERvbWFpbignQ29nbml0b0RvbWFpbicsIHtcbiAgICAgIGNvZ25pdG9Eb21haW46IHsgZG9tYWluUHJlZml4OiBwcm9wcy5jb2duaXRvRG9tYWluUHJlZml4IH0sXG4gICAgfSk7XG4gICAgdGhpcy5jb2duaXRvRG9tYWluVXJsID0gYCR7cHJvcHMuY29nbml0b0RvbWFpblByZWZpeH0uYXV0aC4ke2NvcmUuU3RhY2sub2YodGhpcykucmVnaW9ufS5hbWF6b25jb2duaXRvLmNvbWA7XG5cbiAgICBpZiAocHJvcHMuaWRlbnRpdHlQb29sKSB7XG4gICAgICBjb25zdCBpZHAgPSBwcm9wcy5pZGVudGl0eVBvb2w7XG4gICAgICB0aGlzLmlkZW50aXR5UG9vbCA9IG5ldyBjb2duaXRvLkNmbklkZW50aXR5UG9vbCh0aGlzLCAnSWRlbnRpdHlQb29sJywge1xuICAgICAgICBhbGxvd1VuYXV0aGVudGljYXRlZElkZW50aXRpZXM6IGlkcC5hbGxvd1VuYXV0aGVudGljYXRlZElkZW50aXRpZXMgPz8gZmFsc2UsXG4gICAgICAgIGNvZ25pdG9JZGVudGl0eVByb3ZpZGVyczogcHJvcHMuYXBwQ2xpZW50cy5tYXAoc3BlYyA9PiAoe1xuICAgICAgICAgIGNsaWVudElkOiB0aGlzLnVzZXJQb29sQ2xpZW50c1tzcGVjLmtleV0udXNlclBvb2xDbGllbnRJZCxcbiAgICAgICAgICBwcm92aWRlck5hbWU6IHRoaXMudXNlclBvb2wudXNlclBvb2xQcm92aWRlck5hbWUsXG4gICAgICAgICAgc2VydmVyU2lkZVRva2VuQ2hlY2s6IHRydWUsXG4gICAgICAgIH0pKSxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmF1dGhlbnRpY2F0ZWRSb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdBdXRoZW50aWNhdGVkUm9sZScsIHtcbiAgICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLkZlZGVyYXRlZFByaW5jaXBhbChcbiAgICAgICAgICAnY29nbml0by1pZGVudGl0eS5hbWF6b25hd3MuY29tJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAnU3RyaW5nRXF1YWxzJzogeyAnY29nbml0by1pZGVudGl0eS5hbWF6b25hd3MuY29tOmF1ZCc6IHRoaXMuaWRlbnRpdHlQb29sLnJlZiB9LFxuICAgICAgICAgICAgJ0ZvckFueVZhbHVlOlN0cmluZ0xpa2UnOiB7ICdjb2duaXRvLWlkZW50aXR5LmFtYXpvbmF3cy5jb206YW1yJzogJ2F1dGhlbnRpY2F0ZWQnIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICAnc3RzOkFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHknLFxuICAgICAgICApLFxuICAgICAgICBtYW5hZ2VkUG9saWNpZXM6IGlkcC5hdXRoZW50aWNhdGVkUm9sZU1hbmFnZWRQb2xpY2llcyxcbiAgICAgIH0pO1xuXG4gICAgICBuZXcgY29nbml0by5DZm5JZGVudGl0eVBvb2xSb2xlQXR0YWNobWVudCh0aGlzLCAnSWRlbnRpdHlQb29sUm9sZXMnLCB7XG4gICAgICAgIGlkZW50aXR5UG9vbElkOiB0aGlzLmlkZW50aXR5UG9vbC5yZWYsXG4gICAgICAgIHJvbGVzOiB7IGF1dGhlbnRpY2F0ZWQ6IHRoaXMuYXV0aGVudGljYXRlZFJvbGUucm9sZUFybiB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIEFCQUM6IG1hcCBjbGFpbXMgdG8gcHJpbmNpcGFsIHRhZ3Mgb24gdGhlIHVzZXItcG9vbCBwcm92aWRlci5cbiAgICAgIGlmIChpZHAucHJpbmNpcGFsVGFncyAmJiBPYmplY3Qua2V5cyhpZHAucHJpbmNpcGFsVGFncykubGVuZ3RoID4gMCkge1xuICAgICAgICBuZXcgY29nbml0by5DZm5JZGVudGl0eVBvb2xQcmluY2lwYWxUYWcodGhpcywgJ1ByaW5jaXBhbFRhZ3MnLCB7XG4gICAgICAgICAgaWRlbnRpdHlQb29sSWQ6IHRoaXMuaWRlbnRpdHlQb29sLnJlZixcbiAgICAgICAgICBpZGVudGl0eVByb3ZpZGVyTmFtZTogdGhpcy51c2VyUG9vbC51c2VyUG9vbFByb3ZpZGVyTmFtZSxcbiAgICAgICAgICB1c2VEZWZhdWx0czogZmFsc2UsXG4gICAgICAgICAgcHJpbmNpcGFsVGFnczogaWRwLnByaW5jaXBhbFRhZ3MsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
263
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nbml0b0N1c3RvbWVyUG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbG91ZGZyb250L3BhdHRlcm5zL2NvZ25pdG9DdXN0b21lclBvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQTZCO0FBQzdCLGtEQUFvQztBQUNwQyw2Q0FLcUI7QUFDckIsdURBQXlDO0FBd0x6Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLG1CQUFvQixTQUFRLFVBQVUsQ0FBQyxTQUFTO0lBWTNELFlBQVksS0FBMkIsRUFBRSxFQUFVLEVBQUUsS0FBK0I7UUFDbEYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEtBQUssU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMvRixNQUFNLElBQUksS0FBSyxDQUNiLGtHQUFrRztrQkFDaEcscUhBQXFILENBQ3hILENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FDYiwrRkFBK0Y7a0JBQzdGLHNHQUFzRyxDQUN6RyxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLFdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ25ELE1BQU0sSUFBSSxLQUFLLENBQ2IsaUVB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QWlCLENBQUMsT0FBTyxFQUFFO2FBQ3pELENBQUMsQ0FBQztZQUVILGdFQUFnRTtZQUNoRSxJQUFJLEdBQUcsQ0FBQyxhQUFhLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNuRSxJQUFJLHlCQUFPLENBQUMsMkJBQTJCLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRTtvQkFDN0QsY0FBYyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRztvQkFDckMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0I7b0JBQ3hELFdBQVcsRUFBRSxLQUFLO29CQUNsQixhQUFhLEVBQUUsR0FBRyxDQUFDLGFBQWE7aUJBQ2pDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBalFELGtEQWlRQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjb3JlIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7XG4gIGF3c19jb2duaXRvIGFzIGNvZ25pdG8sXG4gIGF3c19pYW0gYXMgaWFtLFxuICBhd3Nfa21zIGFzIGttcyxcbiAgYXdzX2xhbWJkYSBhcyBsYW1iZGEsXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSAnY29uc3RydWN0cyc7XG5cbnR5cGUgQWNjb3VudFRha2VvdmVyUmlza0NvbmZpZyA9IGNvZ25pdG8uQ2ZuVXNlclBvb2xSaXNrQ29uZmlndXJhdGlvbkF0dGFjaG1lbnQuQWNjb3VudFRha2VvdmVyUmlza0NvbmZpZ3VyYXRpb25UeXBlUHJvcGVydHk7XG50eXBlIENvbXByb21pc2VkQ3JlZGVudGlhbHNSaXNrQ29uZmlnID0gY29nbml0by5DZm5Vc2VyUG9vbFJpc2tDb25maWd1cmF0aW9uQXR0YWNobWVudC5Db21wcm9taXNlZENyZWRlbnRpYWxzUmlza0NvbmZpZ3VyYXRpb25UeXBlUHJvcGVydHk7XG5cbi8qKlxuICogU3BlY2lmaWNhdGlvbiBmb3Igb25lIENvZ25pdG8gYXBwIGNsaWVudCAoZS5nLiBvbmUgYnJhbmQgb3Igb25lIGZyb250LWVuZCkuXG4gKiBQdWJsaWMgU1BBIGNsaWVudHM6IG5vIHNlY3JldCwgUEtDRSAoYXV0aG9yaXphdGlvbi1jb2RlIGdyYW50KSwgU1JQLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZ25pdG9BcHBDbGllbnRTcGVjIHtcbiAgLyoqIExvZ2ljYWwga2V5IHVzZWQgYXMgdGhlIGNvbnN0cnVjdCBpZCBhbmQgdGhlIGtleSBpbiB7QGxpbmsgQ29nbml0b0N1c3RvbWVyUG9vbC51c2VyUG9vbENsaWVudHN9LiAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcbiAgLyoqIE9BdXRoMiBjYWxsYmFjayBVUkxzIGZvciB0aGlzIGNsaWVudCAodXNlZCBvbmx5IGJ5IHRoZSBzb2NpYWwvaG9zdGVkIHJlZGlyZWN0IGZsb3cpLiAqL1xuICByZWFkb25seSBjYWxsYmFja1VybHM/OiBzdHJpbmdbXTtcbiAgLyoqIExvZ291dCBVUkxzIGZvciB0aGlzIGNsaWVudC4gKi9cbiAgcmVhZG9ubHkgbG9nb3V0VXJscz86IHN0cmluZ1tdO1xuICAvKiogSWRlbnRpdHkgcHJvdmlkZXJzIHRoaXMgY2xpZW50IHN1cHBvcnRzLiBAZGVmYXVsdCBbQ09HTklUT10gKi9cbiAgcmVhZG9ubHkgc3VwcG9ydGVkSWRlbnRpdHlQcm92aWRlcnM/OiBjb2duaXRvLlVzZXJQb29sQ2xpZW50SWRlbnRpdHlQcm92aWRlcltdO1xuICAvKiogR2VuZXJhdGUgYSBjbGllbnQgc2VjcmV0LiBAZGVmYXVsdCBmYWxzZSAocHVibGljIFNQQSBjbGllbnQpICovXG4gIHJlYWRvbmx5IGdlbmVyYXRlU2VjcmV0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBTYW1lLWFjY291bnQgU0VTIGVtYWlsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBwb29sLiBTeW50aGVzaXNlcyBhblxuICogYEVtYWlsQ29uZmlndXJhdGlvbmAgd2l0aCBgRW1haWxTZW5kaW5nQWNjb3VudDogREVWRUxPUEVSYC4gSXRzIHB1cnBvc2UgaXMgdG9cbiAqIHNhdGlzZnkgQ29nbml0bydzIHByZWNvbmRpdGlvbiBmb3IgZW5hYmxpbmcgRU1BSUxfT1RQIE1GQSDigJQgQ29nbml0byByZXF1aXJlcyBhXG4gKiB2ZXJpZmllZCBzYW1lLWFjY291bnQgU0VTIGlkZW50aXR5IG9uIHRoZSBwb29sIGJlZm9yZSBpdCB3aWxsIGFjY2VwdFxuICogYEVuYWJsZWRNZmFzOiBbJ0VNQUlMX09UUCddYCwgaW5kZXBlbmRlbnRseSBvZiBhbnkgY3VzdG9tIGVtYWlsIHNlbmRlciB0aGF0XG4gKiBvdmVycmlkZXMgYWN0dWFsIGRlbGl2ZXJ5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZ25pdG9DdXN0b21lclBvb2xFbWFpbENvbmZpZyB7XG4gIC8qKlxuICAgKiBBUk4gb2YgYSBWRVJJRklFRCBTRVMgaWRlbnRpdHkgaW4gdGhlIFBPT0wncyBPV04gYWNjb3VudCAoZG9tYWluIGlkZW50aXR5XG4gICAqIHByZWZlcnJlZDsgYSB2ZXJpZmllZCBlbWFpbC1hZGRyZXNzIGlkZW50aXR5IGFsc28gd29ya3MpLiBQYXNzZWQgdG8gQ29nbml0byBhc1xuICAgKiB0aGUgYEVtYWlsQ29uZmlndXJhdGlvbi5Tb3VyY2VBcm5gLiBNdXN0IGJlIGluIHRoZSBwb29sJ3MgcmVnaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VzVmVyaWZpZWREb21haW5Bcm46IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBGcm9tIGFkZHJlc3MgZm9yIHRoZSBwb29sJ3MgU0VTIGNvbmZpZ3VyYXRpb24sIGUuZy5cbiAgICogYDJmYUBhbHBoYS5mdW5jdGlvbmFsc2VsZi5jb21gLiBBIGxvY2FsLXBhcnQgb24gdGhlIHZlcmlmaWVkIGlkZW50aXR5J3MgZG9tYWluLlxuICAgKi9cbiAgcmVhZG9ubHkgZnJvbUVtYWlsOiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBkaXNwbGF5IG5hbWUsIGUuZy4gXCJGdW5jdGlvbmFsIFNlbGZcIi4gQGRlZmF1bHQgLSBhZGRyZXNzIG9ubHkgKi9cbiAgcmVhZG9ubHkgZnJvbU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9uYWwgQ29nbml0byBJZGVudGl0eSBQb29sICsgQUJBQyAoYXR0cmlidXRlcy1mb3ItYWNjZXNzLWNvbnRyb2wpIGNvbmZpZy5cbiAqIE1hcHMgdG9rZW4gY2xhaW1zIHRvIHByaW5jaXBhbCB0YWdzIHNvIGRvd25zdHJlYW0gSUFNIGNhbiBzY29wZSBvbiB0aGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZ25pdG9JZGVudGl0eVBvb2xBYmFjQ29uZmlnIHtcbiAgLyoqIEFsbG93IHVuYXV0aGVudGljYXRlZCAoZ3Vlc3QpIGlkZW50aXRpZXMuIEBkZWZhdWx0IGZhbHNlICovXG4gIHJlYWRvbmx5IGFsbG93VW5hdXRoZW50aWNhdGVkSWRlbnRpdGllcz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDbGFpbSDihpIgcHJpbmNpcGFsLXRhZyBtYXBwaW5nLCBlLmcuIGB7IHN1YjogJ2N1c3RvbWVyLWlkJyB9YC4gQXBwbGllZCB0byB0aGVcbiAgICogdXNlci1wb29sIHByb3ZpZGVyIHNvIGF1dGhlbnRpY2F0ZWQgc2Vzc2lvbnMgY2FycnkgdGhlc2UgYXMgYGF3czpQcmluY2lwYWxUYWcvKmAuXG4gICAqL1xuICByZWFkb25seSBwcmluY2lwYWxUYWdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIE1hbmFnZWQgcG9saWNpZXMgZm9yIHRoZSBhdXRoZW50aWNhdGVkIHJvbGUuIEBkZWZhdWx0IG5vbmUgKGF0dGFjaCB5b3VyIG93bikuICovXG4gIHJlYWRvbmx5IGF1dGhlbnRpY2F0ZWRSb2xlTWFuYWdlZFBvbGljaWVzPzogaWFtLklNYW5hZ2VkUG9saWN5W107XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIHtAbGluayBDb2duaXRvQ3VzdG9tZXJQb29sfS4gRXZlcnkgdmFsdWUgaXMgZ2VuZXJpYyDigJQgbm9cbiAqIHByb2plY3QvYnJhbmQvZG9tYWluIHNwZWNpZmljcyBhcmUgYmFrZWQgaW47IHBhc3MgdGhlbSBoZXJlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZ25pdG9DdXN0b21lclBvb2xQcm9wcyB7XG4gIC8qKiBVc2VyIHBvb2wgbmFtZS4gKi9cbiAgcmVhZG9ubHkgdXNlclBvb2xOYW1lPzogc3RyaW5nO1xuICAvKiogQ29nbml0byBob3N0ZWQtVUkgZG9tYWluIHByZWZpeCAoZ2xvYmFsbHkgdW5pcXVlKS4gKi9cbiAgcmVhZG9ubHkgY29nbml0b0RvbWFpblByZWZpeDogc3RyaW5nO1xuICAvKiogQXBwIGNsaWVudHMgdG8gY3JlYXRlICh0eXBpY2FsbHkgb25lIHBlciBicmFuZC9mcm9udC1lbmQpLiBBdCBsZWFzdCBvbmUuICovXG4gIHJlYWRvbmx5IGFwcENsaWVudHM6IENvZ25pdG9BcHBDbGllbnRTcGVjW107XG4gIC8qKiBFbmFibGUgc2VsZi1zZXJ2aWNlIHNpZ24tdXAuIEBkZWZhdWx0IGZhbHNlICovXG4gIHJlYWRvbmx5IHNlbGZTaWduVXBFbmFibGVkPzogYm9vbGVhbjtcbiAgLyoqIE1GQSBlbmZvcmNlbWVudC4gQGRlZmF1bHQgUkVRVUlSRUQgKi9cbiAgcmVhZG9ubHkgbWZhPzogY29nbml0by5NZmE7XG4gIC8qKiBTZWNvbmQgZmFjdG9ycy4gQGRlZmF1bHQgeyBvdHA6IHRydWUsIHNtczogZmFsc2UgfSAqL1xuICByZWFkb25seSBtZmFTZWNvbmRGYWN0b3I/OiBjb2duaXRvLk1mYVNlY29uZEZhY3RvcjtcbiAgLyoqIFBhc3N3b3JkIHBvbGljeS4gQGRlZmF1bHQgbWluTGVuZ3RoIDEyLCB1cHBlci9sb3dlci9kaWdpdHMvc3ltYm9scy4gKi9cbiAgcmVhZG9ubHkgcGFzc3dvcmRQb2xpY3k/OiBjb2duaXRvLlBhc3N3b3JkUG9saWN5O1xuICAvKiogQWR2YW5jZWQgc2VjdXJpdHkgbW9kZSAodGhyZWF0IHByb3RlY3Rpb24pLiBAZGVmYXVsdCBPRkYgKi9cbiAgcmVhZG9ubHkgYWR2YW5jZWRTZWN1cml0eU1vZGU/OiBjb2duaXRvLkFkdmFuY2VkU2VjdXJpdHlNb2RlO1xuICAvKiogU3RhbmRhcmQgYXR0cmlidXRlcyBjb25maWcuICovXG4gIHJlYWRvbmx5IHN0YW5kYXJkQXR0cmlidXRlcz86IGNvZ25pdG8uU3RhbmRhcmRBdHRyaWJ1dGVzO1xuICAvKiogQ3VzdG9tIGF0dHJpYnV0ZXMuICovXG4gIHJlYWRvbmx5IGN1c3RvbUF0dHJpYnV0ZXM/OiB7IFtrZXk6IHN0cmluZ106IGNvZ25pdG8uSUN1c3RvbUF0dHJpYnV0ZSB9O1xuICAvKiogRW5hYmxlIHRoZSBDVVNUT01fQVVUSCBmbG93IG9uIGFwcCBjbGllbnRzLiBAZGVmYXVsdCBmYWxzZSAqL1xuICByZWFkb25seSBlbmFibGVDdXN0b21BdXRoRmxvdz86IGJvb2xlYW47XG4gIC8qKiBBY2Nlc3MgdG9rZW4gdmFsaWRpdHkuIEBkZWZhdWx0IDEgaG91ciAqL1xuICByZWFkb25seSBhY2Nlc3NUb2tlblZhbGlkaXR5PzogY29yZS5EdXJhdGlvbjtcbiAgLyoqIElEIHRva2VuIHZhbGlkaXR5LiBAZGVmYXVsdCAxIGhvdXIgKi9cbiAgcmVhZG9ubHkgaWRUb2tlblZhbGlkaXR5PzogY29yZS5EdXJhdGlvbjtcbiAgLyoqIFJlZnJlc2ggdG9rZW4gdmFsaWRpdHkuIEBkZWZhdWx0IDMwIGRheXMgKi9cbiAgcmVhZG9ubHkgcmVmcmVzaFRva2VuVmFsaWRpdHk/OiBjb3JlLkR1cmF0aW9uO1xuICAvKiogQ29nbml0byBncm91cHMgdG8gY3JlYXRlLiAqL1xuICByZWFkb25seSBncm91cHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFByZS10b2tlbi1nZW5lcmF0aW9uIExhbWJkYSAoVjIpLiBAZGVmYXVsdCBhIGJ1bmRsZWQgbm8tb3AgbGlicmFyeSBMYW1iZGEgaXNcbiAgICogY3JlYXRlZC4gUGFzcyB5b3VyIG93biB0byBjdXN0b21pc2UgZW1pdHRlZCBjbGFpbXMuXG4gICAqL1xuICByZWFkb25seSBwcmVUb2tlbkdlbmVyYXRpb25MYW1iZGE/OiBsYW1iZGEuSUZ1bmN0aW9uO1xuICAvKipcbiAgICogRW5hYmxlIGVtYWlsIG9uZS10aW1lLXBhc3N3b3JkIChgRU1BSUxfT1RQYCkgYXMgdGhlIE1GQSBzZWNvbmQgZmFjdG9yLCBkZWxpdmVyZWRcbiAgICogYnkge0BsaW5rIGN1c3RvbUVtYWlsU2VuZGVyTGFtYmRhfS4gVGhpcyBpcyBzZXQgdmlhIGFuIEwxIG92ZXJyaWRlIG9uIHRoZVxuICAgKiB1bmRlcmx5aW5nIGBDZm5Vc2VyUG9vbGAgKGBFbmFibGVkTWZhczogWydFTUFJTF9PVFAnXWApIHJhdGhlciB0aGFuXG4gICAqIGBtZmFTZWNvbmRGYWN0b3IuZW1haWxgLCBiZWNhdXNlIHRoZSBDREsgTDIgcmVxdWlyZXMgYSBtYW5hZ2VkIChgREVWRUxPUEVSYCkgU0VTXG4gICAqIGBlbWFpbGAgY29uZmlnIGZvciBgbWZhU2Vjb25kRmFjdG9yLmVtYWlsYCDigJQgd2hpY2ggaXMgaW5jb21wYXRpYmxlIHdpdGggYVxuICAgKiBjdXN0b20tZW1haWwtc2VuZGVyLW9ubHkgZGVsaXZlcnkgcGF0aC4gUmVxdWlyZXMge0BsaW5rIGN1c3RvbUVtYWlsU2VuZGVyTGFtYmRhfVxuICAgKiBhbmQge0BsaW5rIGN1c3RvbVNlbmRlckttc0tleX0sIGFuZCBhIHBvb2wgZmVhdHVyZSBwbGFuIG9mIEVzc2VudGlhbHMgb3IgaGlnaGVyLlxuICAgKiBXaGVuIHRydWUsIGFueSBgb3RwYC9gc21zYCBpbiB7QGxpbmsgbWZhU2Vjb25kRmFjdG9yfSBpcyBpZ25vcmVkIOKAlCBFTUFJTF9PVFAgaXNcbiAgICogdGhlIHNvbGUgZmFjdG9yLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZW1haWxPdHBNZmE/OiBib29sZWFuO1xuICAvKipcbiAgICogQ29uZmlndXJlIHRoZSBwb29sIGZvciBQQVNTV09SRExFU1MgY3VzdG9tZXIgc2lnbi1pbiB1c2luZyBjaG9pY2UtYmFzZWRcbiAgICogYXV0aGVudGljYXRpb24gKGBVU0VSX0FVVEhgKSB3aXRoIGBFTUFJTF9PVFBgIGFzIGEgZmlyc3QgYXV0aCBmYWN0b3IuIFRoZVxuICAgKiBjdXN0b21lciBzaWducyBpbiB3aXRoIGp1c3QgdGhlaXIgZW1haWwgYW5kIGEgb25lLXRpbWUgY29kZSDigJQgbm8gcGFzc3dvcmQgYW5kXG4gICAqIG5vIHNlY29uZCBmYWN0b3IuIERlbGl2ZXJlZCBieSB7QGxpbmsgY3VzdG9tRW1haWxTZW5kZXJMYW1iZGF9OyByZXF1aXJlc1xuICAgKiB7QGxpbmsgY3VzdG9tU2VuZGVyS21zS2V5fSBhbmQge0BsaW5rIGVtYWlsQ29uZmlndXJhdGlvbn0gKHNhbWUgZW5hYmxlbWVudFxuICAgKiBwcmVjb25kaXRpb24gYXMge0BsaW5rIGVtYWlsT3RwTWZhfSksIGFuZCBhbiBFc3NlbnRpYWxzLW9yLWhpZ2hlciBmZWF0dXJlIHBsYW4uXG4gICAqXG4gICAqIEhhcmQgQ29nbml0byBjb25zdHJhaW50cyB0aGlzIG1vZGUgZW5jb2RlcyAocHJvdmVuIGFnYWluc3QgYSBsaXZlIHBvb2wpOlxuICAgKiAtIGBQQVNTV09SRGAgaXMgTUFOREFUT1JZIGluIGBBbGxvd2VkRmlyc3RBdXRoRmFjdG9yc2A7IENvZ25pdG8gcmVqZWN0cyBhIGxpc3RcbiAgICogICB3aXRob3V0IGl0LiBTbyB0aGUgcG9vbCBhbGxvd3MgYFtQQVNTV09SRCwgRU1BSUxfT1RQXWAgYW5kIHRoZSBDT05TVU1FUidzIFVJXG4gICAqICAgbXVzdCBuZXZlciBvZmZlciB0aGUgcGFzc3dvcmQgcGF0aCAoYWx3YXlzIGBJbml0aWF0ZUF1dGgoVVNFUl9BVVRILFxuICAgKiAgIFBSRUZFUlJFRF9DSEFMTEVOR0U9RU1BSUxfT1RQKWApLiBUbyBrZWVwIHRoZSBwYXNzd29yZCB1bnJlYWNoYWJsZSB0aHJvdWdoIHRoZVxuICAgKiAgIGFwcCBjbGllbnQgdG9vLCB0aGlzIG1vZGUgYWxzbyBkcm9wcyB0aGUgYHVzZXJTcnBgIGF1dGggZmxvdyBhbmQgZW5hYmxlcyB0aGVcbiAgICogICBgdXNlcmAgKGNob2ljZS1iYXNlZCBgQUxMT1dfVVNFUl9BVVRIYCkgZmxvdyBvbiB0aGUgYXBwIGNsaWVudHMuXG4gICAqIC0gYEVNQUlMX09UUGAgYXMgYSBmaXJzdCBmYWN0b3IgaXMgSU5DT01QQVRJQkxFIHdpdGggYE1mYUNvbmZpZ3VyYXRpb246IE9OYCwgc29cbiAgICogICB0aGlzIG1vZGUgZm9yY2VzIGBtZmE6IE9GRmAuIE5PVEU6IHRoZSBgT0ZGIC0+IE9OYCB0cmFuc2l0aW9uIGlzIGlycmV2ZXJzaWJsZVxuICAgKiAgIHZpYSB0aGUgQVBJLCBzbyBhIHBvb2wgY3JlYXRlZCB3aXRoIHRoaXMgbW9kZSBjYW5ub3QgbGF0ZXIgZ2FpbiBNRkEgaW4gcGxhY2UuXG4gICAqXG4gICAqIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIHtAbGluayBlbWFpbE90cE1mYX0gKGVtYWlsIGlzIGEgZmlyc3QgZmFjdG9yIGhlcmUsIGFcbiAgICogc2Vjb25kIGZhY3RvciB0aGVyZSkuIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBwYXNzd29yZGxlc3NFbWFpbE90cD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXN0b20gRW1haWwgU2VuZGVyIExhbWJkYS4gV2hlbiBzZXQgKHRvZ2V0aGVyIHdpdGgge0BsaW5rIGN1c3RvbVNlbmRlckttc0tleX0pLFxuICAgKiBpdCBpcyB3aXJlZCB0byB0aGUgcG9vbCB2aWEgdGhlIGBDVVNUT01fRU1BSUxfU0VOREVSYCB0cmlnZ2VyIGFuZCBDb2duaXRvXG4gICAqIGRlbGl2ZXJzIGFsbCBjdXN0b21lciBlbWFpbHMgKE1GQSBjb2RlcywgdmVyaWZpY2F0aW9uLCB0ZW1wb3JhcnkgcGFzc3dvcmRzKVxuICAgKiB0aHJvdWdoIHRoaXMgTGFtYmRhIGluc3RlYWQgb2YgaXRzIGRlZmF1bHQgc2VuZGVyIG9yIGEgbWFuYWdlZCBTRVMgc2VuZGVyLlxuICAgKiBDb2duaXRvIGVuY3J5cHRzIGVhY2ggY29kZSB0byB7QGxpbmsgY3VzdG9tU2VuZGVyS21zS2V5fTsgdGhlIExhbWJkYSBkZWNyeXB0c1xuICAgKiBpdCB3aXRoIHRoZSBBV1MgRW5jcnlwdGlvbiBTREsgYmVmb3JlIHNlbmRpbmcuIFJlcXVpcmVzIHtAbGluayBjdXN0b21TZW5kZXJLbXNLZXl9LlxuICAgKiBAZGVmYXVsdCAtIENvZ25pdG8ncyBkZWZhdWx0IGVtYWlsIGRlbGl2ZXJ5XG4gICAqL1xuICByZWFkb25seSBjdXN0b21FbWFpbFNlbmRlckxhbWJkYT86IGxhbWJkYS5JRnVuY3Rpb247XG4gIC8qKlxuICAgKiBTeW1tZXRyaWMgS01TIGtleSBDb2duaXRvIHVzZXMgdG8gZW5jcnlwdCBjb2RlcyBmb3Ige0BsaW5rIGN1c3RvbUVtYWlsU2VuZGVyTGFtYmRhfS5cbiAgICogUmVxdWlyZWQgd2hlbiBhIGN1c3RvbSBlbWFpbCBzZW5kZXIgaXMgcHJvdmlkZWQ7IGlnbm9yZWQgb3RoZXJ3aXNlLiBDb2duaXRvIGlzXG4gICAqIGdyYW50ZWQgZW5jcnlwdC9kZWNyeXB0IG9uIGl0OyB0aGUgTGFtYmRhIG11c3QgYmUgc2VwYXJhdGVseSBncmFudGVkIGRlY3J5cHQuXG4gICAqIEBkZWZhdWx0IC0gbm8ga2V5IChvbmx5IHZhbGlkIHdoZW4gbm8gY3VzdG9tIGVtYWlsIHNlbmRlciBpcyBzZXQpXG4gICAqL1xuICByZWFkb25seSBjdXN0b21TZW5kZXJLbXNLZXk/OiBrbXMuSUtleTtcbiAgLyoqXG4gICAqIFNhbWUtYWNjb3VudCBTRVMgZW1haWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIHBvb2wuIFJFUVVJUkVEIHdoZW5cbiAgICoge0BsaW5rIGVtYWlsT3RwTWZhfSBpcyBzZXQ6IENvZ25pdG8gcmVmdXNlcyB0byBlbmFibGUgRU1BSUxfT1RQIE1GQSB1bmxlc3MgdGhlXG4gICAqIHBvb2wgY2FycmllcyBhbiBgRW1haWxTZW5kaW5nQWNjb3VudDogREVWRUxPUEVSYCBjb25maWd1cmF0aW9uIHBvaW50aW5nIGF0IGFcbiAgICogVkVSSUZJRUQgU0VTIGlkZW50aXR5IGluIHRoZSBwb29sJ3MgT1dOIGFjY291bnQg4oCUIHRoaXMgcHJlY29uZGl0aW9uIGlzIHZhbGlkYXRlZFxuICAgKiBhdCB0aGUgcG9vbC1jb25maWcgbGF5ZXIsIEJFRk9SRSBhbnkgZW1haWwgaXMgcm91dGVkLCBzbyBhXG4gICAqIHtAbGluayBjdXN0b21FbWFpbFNlbmRlckxhbWJkYX0gKHdoaWNoIG92ZXJyaWRlcyBkZWxpdmVyeSkgZG9lcyBub3Qgc2F0aXNmeSBpdC5cbiAgICpcbiAgICogVGhlIGlkZW50aXR5IGhlcmUgZXhpc3RzIG9ubHkgdG8gc2F0aXNmeSB0aGF0IGVuYWJsZW1lbnQgcHJlY29uZGl0aW9uOyB3aGVuIGFcbiAgICogY3VzdG9tIGVtYWlsIHNlbmRlciBpcyBhdHRhY2hlZCwgQ29nbml0byBuZXZlciBhY3R1YWxseSBzZW5kcyB0aHJvdWdoIHRoaXNcbiAgICogaWRlbnRpdHkgKHRoZSBMYW1iZGEgaW50ZXJjZXB0cyBldmVyeSBlbWFpbCksIHNvIGEgY3Jvc3MtYWNjb3VudCBvclxuICAgKiBTRVMtc2FuZGJveCBkZWxpdmVyeSBwYXRoIGlzIHVuYWZmZWN0ZWQuIFByZWZlciBhIHZlcmlmaWVkIERPTUFJTiBpZGVudGl0eTtcbiAgICogYSB2ZXJpZmllZCBlbWFpbC1hZGRyZXNzIGlkZW50aXR5IGFsc28gd29ya3MgaWYgQ29nbml0byByZWplY3RzIHRoZSBkb21haW4gZm9ybS5cbiAgICogQGRlZmF1bHQgLSBubyBTRVMgY29uZmlnIChDb2duaXRvIGRlZmF1bHQgc2VuZGVyOyBub3QgdmFsaWQgd2l0aCBlbWFpbE90cE1mYSlcbiAgICovXG4gIHJlYWRvbmx5IGVtYWlsQ29uZmlndXJhdGlvbj86IENvZ25pdG9DdXN0b21lclBvb2xFbWFpbENvbmZpZztcbiAgLyoqXG4gICAqIEwxIGFjY291bnQtdGFrZW92ZXIgcmlzayBjb25maWd1cmF0aW9uIChyZXF1aXJlcyB7QGxpbmsgYWR2YW5jZWRTZWN1cml0eU1vZGV9XG4gICAqIEVORk9SQ0VEL0FVRElUKS4gUGFzc2VkIHRocm91Z2ggdG8gQ2ZuVXNlclBvb2xSaXNrQ29uZmlndXJhdGlvbkF0dGFjaG1lbnQuXG4gICAqL1xuICByZWFkb25seSBhY2NvdW50VGFrZW92ZXJSaXNrQ29uZmlndXJhdGlvbj86IEFjY291bnRUYWtlb3ZlclJpc2tDb25maWc7XG4gIC8qKiBMMSBjb21wcm9taXNlZC1jcmVkZW50aWFscyByaXNrIGNvbmZpZ3VyYXRpb24uICovXG4gIHJlYWRvbmx5IGNvbXByb21pc2VkQ3JlZGVudGlhbHNSaXNrQ29uZmlndXJhdGlvbj86IENvbXByb21pc2VkQ3JlZGVudGlhbHNSaXNrQ29uZmlnO1xuICAvKiogT3B0aW9uYWwgaWRlbnRpdHkgcG9vbCArIEFCQUMgY29uZmlndXJhdGlvbi4gKi9cbiAgcmVhZG9ubHkgaWRlbnRpdHlQb29sPzogQ29nbml0b0lkZW50aXR5UG9vbEFiYWNDb25maWc7XG4gIC8qKiBSZW1vdmFsIHBvbGljeSBmb3IgdGhlIHBvb2wuIEBkZWZhdWx0IFJFVEFJTiAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogY29yZS5SZW1vdmFsUG9saWN5O1xufVxuXG4vKipcbiAqIEEgZ2VuZXJpYywgcmV1c2FibGUgc2VjdXJlIENvZ25pdG8gKipjdXN0b21lcioqIHVzZXIgcG9vbCBmb3IgdGhlIGN1c3RvbS1VSVxuICogKGNsaWVudC1zaWRlIFNSUCkgYXV0aGVudGljYXRpb24gcGF0dGVybjogcHVibGljIFBLQ0UgYXBwIGNsaWVudHMsIE1GQSxcbiAqIHN0cm9uZyBwYXNzd29yZCBwb2xpY3ksIG9wdGlvbmFsIGFkdmFuY2VkLXNlY3VyaXR5IHRocmVhdCBwcm90ZWN0aW9uLFxuICogcGVyLWNsaWVudCAocGVyLWJyYW5kKSBhcHAgY2xpZW50cywgYW5kIGFuIG9wdGlvbmFsIGlkZW50aXR5IHBvb2wgd2l0aCBBQkFDLlxuICpcbiAqIFByb3Zpc2lvbnMgT05MWSB0aGUgaWRlbnRpdHkgcHJvdmlkZXIuIEl0IGtub3dzIG5vdGhpbmcgYWJvdXQgQ2xvdWRGcm9udCxcbiAqIHNlc3Npb25zLCBvciBhbnkgc3BlY2lmaWMgcHJvamVjdCDigJQgcGFpciBpdCB3aXRoIGBDb2duaXRvU2Vzc2lvbkJhY2tlbmRgXG4gKiAoc2Vzc2lvbiBzdWJzdHJhdGUpIGFuZCBgQ29nbml0b0N1c3RvbVVpQXV0aGAgKGVkZ2UvQ0ROKS5cbiAqL1xuZXhwb3J0IGNsYXNzIENvZ25pdG9DdXN0b21lclBvb2wgZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSB1c2VyUG9vbDogY29nbml0by5Vc2VyUG9vbDtcbiAgLyoqIEFwcCBjbGllbnRzIGtleWVkIGJ5IHtAbGluayBDb2duaXRvQXBwQ2xpZW50U3BlYy5rZXl9LiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlclBvb2xDbGllbnRzOiBSZWNvcmQ8c3RyaW5nLCBjb2duaXRvLlVzZXJQb29sQ2xpZW50PjtcbiAgLyoqIFRoZSBmaXJzdCBhcHAgY2xpZW50LCBmb3IgY29udmVuaWVuY2UuICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyUG9vbENsaWVudDogY29nbml0by5Vc2VyUG9vbENsaWVudDtcbiAgcHVibGljIHJlYWRvbmx5IHVzZXJQb29sRG9tYWluOiBjb2duaXRvLlVzZXJQb29sRG9tYWluO1xuICAvKiogSG9zdGVkLVVJIGRvbWFpbiBVUkwsIGUuZy4gYDxwcmVmaXg+LmF1dGguPHJlZ2lvbj4uYW1hem9uY29nbml0by5jb21gLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29nbml0b0RvbWFpblVybDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgaWRlbnRpdHlQb29sPzogY29nbml0by5DZm5JZGVudGl0eVBvb2w7XG4gIHB1YmxpYyByZWFkb25seSBhdXRoZW50aWNhdGVkUm9sZT86IGlhbS5Sb2xlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENvZ25pdG9DdXN0b21lclBvb2xQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAoIXByb3BzLmFwcENsaWVudHMgfHwgcHJvcHMuYXBwQ2xpZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29nbml0b0N1c3RvbWVyUG9vbCByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXBwIGNsaWVudCcpO1xuICAgIH1cblxuICAgIGlmICgocHJvcHMuY3VzdG9tRW1haWxTZW5kZXJMYW1iZGEgPT09IHVuZGVmaW5lZCkgIT09IChwcm9wcy5jdXN0b21TZW5kZXJLbXNLZXkgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0NvZ25pdG9DdXN0b21lclBvb2w6IGN1c3RvbUVtYWlsU2VuZGVyTGFtYmRhIGFuZCBjdXN0b21TZW5kZXJLbXNLZXkgbXVzdCBiZSBwcm92aWRlZCB0b2dldGhlciDigJQgJ1xuICAgICAgICArICdhIGN1c3RvbSBlbWFpbCBzZW5kZXIgcmVxdWlyZXMgYSBLTVMga2V5IGZvciBDb2duaXRvIHRvIGVuY3J5cHQgY29kZXMgdG8sIGFuZCB0aGUga2V5IGlzIHVudXNlZCB3aXRob3V0IHRoZSBMYW1iZGEuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmVtYWlsT3RwTWZhICYmICFwcm9wcy5jdXN0b21FbWFpbFNlbmRlckxhbWJkYSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ29nbml0b0N1c3RvbWVyUG9vbDogZW1haWxPdHBNZmEgcmVxdWlyZXMgY3VzdG9tRW1haWxTZW5kZXJMYW1iZGEgKGFuZCBjdXN0b21TZW5kZXJLbXNLZXkpIOKAlCAnXG4gICAgICAgICsgJ0VNQUlMX09UUCBjb2RlcyBhcmUgZGVsaXZlcmVkIGJ5IHRoZSBjdXN0b20gZW1haWwgc2VuZGVyLCBzbyBlbWFpbCBNRkEgY2Fubm90IGJlIGVuYWJsZWQgd2l0aG91dCBpdC4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZW1haWxPdHBNZmEgJiYgIXByb3BzLmVtYWlsQ29uZmlndXJhdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ29nbml0b0N1c3RvbWVyUG9vbDogZW1haWxPdHBNZmEgcmVxdWlyZXMgZW1haWxDb25maWd1cmF0aW9uIOKAlCAnXG4gICAgICAgICsgJ0NvZ25pdG8gcmVmdXNlcyB0byBlbmFibGUgRU1BSUxfT1RQIE1GQSB1bmxlc3MgdGhlIHBvb2wgY2FycmllcyBhIERFVkVMT1BFUiBTRVMgJ1xuICAgICAgICArICdFbWFpbENvbmZpZ3VyYXRpb24gb24gYSB2ZXJpZmllZCBzYW1lLWFjY291bnQgaWRlbnRpdHkuIFRoaXMgcHJlY29uZGl0aW9uIGlzIGNoZWNrZWQgJ1xuICAgICAgICArICdiZWZvcmUgYW55IGVtYWlsIGlzIHJvdXRlZCwgc28gdGhlIGN1c3RvbSBlbWFpbCBzZW5kZXIgZG9lcyBub3Qgc2F0aXNmeSBpdC4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMucGFzc3dvcmRsZXNzRW1haWxPdHAgJiYgcHJvcHMuZW1haWxPdHBNZmEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0NvZ25pdG9DdXN0b21lclBvb2w6IHBhc3N3b3JkbGVzc0VtYWlsT3RwIGFuZCBlbWFpbE90cE1mYSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIOKAlCAnXG4gICAgICAgICsgJ3Bhc3N3b3JkbGVzcyB1c2VzIEVNQUlMX09UUCBhcyBhIEZJUlNUIGF1dGggZmFjdG9yIChNRkEgb2ZmKSwgd2hpbGUgZW1haWxPdHBNZmEgdXNlcyBpdCAnXG4gICAgICAgICsgJ2FzIGEgU0VDT05EIGZhY3RvciAoTUZBIG9uKS4gQ2hvb3NlIG9uZS4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMucGFzc3dvcmRsZXNzRW1haWxPdHAgJiYgKCFwcm9wcy5jdXN0b21FbWFpbFNlbmRlckxhbWJkYSB8fCAhcHJvcHMuZW1haWxDb25maWd1cmF0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ29nbml0b0N1c3RvbWVyUG9vbDogcGFzc3dvcmRsZXNzRW1haWxPdHAgcmVxdWlyZXMgY3VzdG9tRW1haWxTZW5kZXJMYW1iZGEsIGN1c3RvbVNlbmRlckttc0tleSAnXG4gICAgICAgICsgJ2FuZCBlbWFpbENvbmZpZ3VyYXRpb24g4oCUIHRoZSBmaXJzdC1mYWN0b3IgRU1BSUxfT1RQIGNvZGUgaXMgZGVsaXZlcmVkIGJ5IHRoZSBjdXN0b20gZW1haWwgJ1xuICAgICAgICArICdzZW5kZXIsIGFuZCBDb2duaXRvIHJlcXVpcmVzIHRoZSBzYW1lIERFVkVMT1BFUiBTRVMgRW1haWxDb25maWd1cmF0aW9uIGVuYWJsZW1lbnQgcHJlY29uZGl0aW9uLicsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFdpdGggZW1haWxPdHBNZmEsIEVNQUlMX09UUCBpcyB0aGUgc29sZSBmYWN0b3IgYW5kIGlzIGFwcGxpZWQgdmlhIGFuIEwxXG4gICAgLy8gb3ZlcnJpZGUgYmVsb3c7IGRvIE5PVCBwYXNzIG1mYVNlY29uZEZhY3Rvci5lbWFpbCB0byB0aGUgTDIgKGl0cyB2YWxpZGF0ZUVtYWlsTWZhXG4gICAgLy8gZGVtYW5kcyBhIGBlbWFpbGAgVXNlclBvb2xFbWFpbCBiZSBzZXQsIHdoaWNoIHdlIHN1cHBseSBzZXBhcmF0ZWx5IHZpYVxuICAgIC8vIGVtYWlsQ29uZmlndXJhdGlvbiDigJQgc2VlIHRoZSBgZW1haWxgIHByb3AgYmVsb3cpLlxuICAgIGNvbnN0IGwyTWZhU2Vjb25kRmFjdG9yID0gcHJvcHMuZW1haWxPdHBNZmFcbiAgICAgID8geyBvdHA6IGZhbHNlLCBzbXM6IGZhbHNlIH1cbiAgICAgIDogKHByb3BzLm1mYVNlY29uZEZhY3RvciA/PyB7IG90cDogdHJ1ZSwgc21zOiBmYWxzZSB9KTtcblxuICAgIGNvbnN0IGFjY291bnRSZWNvdmVyeSA9IHByb3BzLmVtYWlsT3RwTWZhXG4gICAgLy8gQ29nbml0byByZWplY3RzIEVtYWlsTWZhQ29uZmlndXJhdGlvbiB1bmxlc3MgQWNjb3VudFJlY292ZXJ5U2V0dGluZyBoYXMgYXRcbiAgICAvLyBsZWFzdCBvbmUgbWVjaGFuaXNtIG90aGVyIHRoYW4gdmVyaWZpZWRfZW1haWwgKHJlY292ZXJpbmcgZW1haWwtYmFzZWQgTUZBIHZpYVxuICAgIC8vIGVtYWlsIGlzIGNpcmN1bGFyKS4gQWNjb3VudFJlY292ZXJ5Lk5PTkUgbWFwcyB0byB0aGUgYWRtaW5fb25seSBtZWNoYW5pc20sIHdoaWNoXG4gICAgLy8gc2F0aXNmaWVzIHRoZSBjb25zdHJhaW50IHdpdGhvdXQgaW50cm9kdWNpbmcgYW4gU01TL3Bob25lIGZhY3RvciBpbnRvIHRoaXNcbiAgICAvLyBwYXNzd29yZGxlc3MtZW1haWwgZGVzaWduLiBPdGhlcndpc2Uga2VlcCB0aGUgZW1haWwtb25seSBkZWZhdWx0LlxuICAgICAgPyBjb2duaXRvLkFjY291bnRSZWNvdmVyeS5OT05FXG4gICAgICA6IGNvZ25pdG8uQWNjb3VudFJlY292ZXJ5LkVNQUlMX09OTFk7XG5cbiAgICAvLyBQYXNzd29yZGxlc3MgdXNlcyBFTUFJTF9PVFAgYXMgYSBGSVJTVCBhdXRoIGZhY3Rvciwgd2hpY2ggQ29nbml0byBmb3JiaWRzIHdoaWxlXG4gICAgLy8gTUZBIGlzIE9OIChcIk9ubHkgUEFTU1dPUkQgYW5kIFdFQl9BVVRITiBjYW4gYmUgZW5hYmxlZCBhcyBhbiBhdXRoIGZhY3RvciBpZiBNRkFcbiAgICAvLyBpcyBlbmFibGVkXCIpLiBTbyBwYXNzd29yZGxlc3MgZm9yY2VzIE1GQSBPRkYuIE5COiB0aGUgT0ZGLT5PTiB0cmFuc2l0aW9uIGlzXG4gICAgLy8gaXJyZXZlcnNpYmxlIHZpYSB0aGUgQVBJIOKAlCBhIHBvb2wgY3JlYXRlZCBwYXNzd29yZGxlc3MgY2Fubm90IGxhdGVyIGdhaW4gTUZBIGluIHBsYWNlLlxuICAgIGNvbnN0IG1mYUNvbmZpZyA9IHByb3BzLnBhc3N3b3JkbGVzc0VtYWlsT3RwXG4gICAgICA/IGNvZ25pdG8uTWZhLk9GRlxuICAgICAgOiAocHJvcHMubWZhID8/IGNvZ25pdG8uTWZhLlJFUVVJUkVEKTtcblxuICAgIHRoaXMudXNlclBvb2wgPSBuZXcgY29nbml0by5Vc2VyUG9vbCh0aGlzLCAnVXNlclBvb2wnLCB7XG4gICAgICB1c2VyUG9vbE5hbWU6IHByb3BzLnVzZXJQb29sTmFtZSxcbiAgICAgIHNlbGZTaWduVXBFbmFibGVkOiBwcm9wcy5zZWxmU2lnblVwRW5hYmxlZCA/PyBmYWxzZSxcbiAgICAgIHNpZ25JbkFsaWFzZXM6IHsgZW1haWw6IHRydWUgfSxcbiAgICAgIHNpZ25JbkNhc2VTZW5zaXRpdmU6IGZhbHNlLFxuICAgICAgbWZhOiBtZmFDb25maWcsXG4gICAgICBtZmFTZWNvbmRGYWN0b3I6IGwyTWZhU2Vjb25kRmFjdG9yLFxuICAgICAgcGFzc3dvcmRQb2xpY3k6IHByb3BzLnBhc3N3b3JkUG9saWN5ID8/IHtcbiAgICAgICAgbWluTGVuZ3RoOiAxMixcbiAgICAgICAgcmVxdWlyZUxvd2VyY2FzZTogdHJ1ZSxcbiAgICAgICAgcmVxdWlyZVVwcGVyY2FzZTogdHJ1ZSxcbiAgICAgICAgcmVxdWlyZURpZ2l0czogdHJ1ZSxcbiAgICAgICAgcmVxdWlyZVN5bWJvbHM6IHRydWUsXG4gICAgICB9LFxuICAgICAgYWR2YW5jZWRTZWN1cml0eU1vZGU6IHByb3BzLmFkdmFuY2VkU2VjdXJpdHlNb2RlID8/IGNvZ25pdG8uQWR2YW5jZWRTZWN1cml0eU1vZGUuT0ZGLFxuICAgICAgc3RhbmRhcmRBdHRyaWJ1dGVzOiBwcm9wcy5zdGFuZGFyZEF0dHJpYnV0ZXMsXG4gICAgICBjdXN0b21BdHRyaWJ1dGVzOiBwcm9wcy5jdXN0b21BdHRyaWJ1dGVzLFxuICAgICAgYXV0b1ZlcmlmeTogeyBlbWFpbDogdHJ1ZSB9LFxuICAgICAgYWNjb3VudFJlY292ZXJ5LFxuICAgICAgLy8gQ3VzdG9tIEVtYWlsIFNlbmRlcjogd2hlbiBwcm92aWRlZCwgQ29nbml0byByb3V0ZXMgZXZlcnkgY3VzdG9tZXIgZW1haWxcbiAgICAgIC8vIHRocm91Z2ggdGhpcyBMYW1iZGEgYW5kIGVuY3J5cHRzIGNvZGVzIHRvIGN1c3RvbVNlbmRlckttc0tleS4gQm90aCBtdXN0IGJlXG4gICAgICAvLyBzZXQgb24gdGhlIHBvb2wgYXQgY29uc3RydWN0aW9uIOKAlCB0aGUgS01TIGtleSBpcyBub3Qgc2V0dGFibGUgdmlhIGFkZFRyaWdnZXIuXG4gICAgICBjdXN0b21TZW5kZXJLbXNLZXk6IHByb3BzLmN1c3RvbVNlbmRlckttc0tleSxcbiAgICAgIGxhbWJkYVRyaWdnZXJzOiBwcm9wcy5jdXN0b21FbWFpbFNlbmRlckxhbWJkYVxuICAgICAgICA/IHsgY3VzdG9tRW1haWxTZW5kZXI6IHByb3BzLmN1c3RvbUVtYWlsU2VuZGVyTGFtYmRhIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICByZW1vdmFsUG9saWN5OiBwcm9wcy5yZW1vdmFsUG9saWN5ID8/IGNvcmUuUmVtb3ZhbFBvbGljeS5SRVRBSU4sXG4gICAgfSk7XG5cbiAgICAvLyBMMSBlc2NhcGUgaGF0Y2g6IGVuYWJsZSBFTUFJTF9PVFAgYXMgdGhlIG9ubHkgTUZBIGZhY3Rvci4gVGhlIEwyIGNhbm5vdCBleHByZXNzXG4gICAgLy8gXCJlbWFpbCBNRkEgZGVsaXZlcmVkIHNvbGVseSBieSBhIGN1c3RvbSBzZW5kZXJcIiAoc2VlIGVtYWlsT3RwTWZhIGRvY3MpLCBzbyBzZXRcbiAgICAvLyBFbmFibGVkTWZhcyBkaXJlY3RseSBvbiB0aGUgdW5kZXJseWluZyBDZm5Vc2VyUG9vbC4gVGhlIGN1c3RvbSBlbWFpbCBzZW5kZXJcbiAgICAvLyBkZWxpdmVycyB0aGUgY29kZSwgYnV0IENvZ25pdG8gc3RpbGwgcmVxdWlyZXMgYSBERVZFTE9QRVIgU0VTIEVtYWlsQ29uZmlndXJhdGlvblxuICAgIC8vIG9uIGEgdmVyaWZpZWQgc2FtZS1hY2NvdW50IGlkZW50aXR5IGFzIGFuIEVOQUJMRU1FTlQgcHJlY29uZGl0aW9uIChiZWxvdykuXG4gICAgaWYgKHByb3BzLmVtYWlsQ29uZmlndXJhdGlvbikge1xuICAgICAgLy8gU2V0IEVtYWlsQ29uZmlndXJhdGlvbiB2aWEgTDEgd2l0aCB0aGUgY2FsbGVyJ3MgZXhhY3QgdmVyaWZpZWQgc2FtZS1hY2NvdW50XG4gICAgICAvLyBpZGVudGl0eSBBUk4g4oCUIGFjY2VwdGluZyBlaXRoZXIgYSBkb21haW4gb3IgYW4gZW1haWwtYWRkcmVzcyBpZGVudGl0eSB3aXRob3V0XG4gICAgICAvLyBDREsgcmUtZGVyaXZpbmcgdGhlIEFSTiBmcm9tIHRoZSBGcm9tIGFkZHJlc3MuIFRoaXMgc2F0aXNmaWVzIENvZ25pdG8nc1xuICAgICAgLy8gRU1BSUxfT1RQIGVuYWJsZW1lbnQgcHJlY29uZGl0aW9uOyB0aGUgY3VzdG9tIGVtYWlsIHNlbmRlciBzdGlsbCBvdmVycmlkZXNcbiAgICAgIC8vIGFjdHVhbCBkZWxpdmVyeSwgc28gdGhpcyBpZGVudGl0eSBpcyBuZXZlciBzZW50IHRocm91Z2guXG4gICAgICBjb25zdCBjZm5Qb29sID0gdGhpcy51c2VyUG9vbC5ub2RlLmRlZmF1bHRDaGlsZCBhcyBjb2duaXRvLkNmblVzZXJQb29sO1xuICAgICAgY2ZuUG9vbC5lbWFpbENvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAgIGVtYWlsU2VuZGluZ0FjY291bnQ6ICdERVZFTE9QRVInLFxuICAgICAgICBzb3VyY2VBcm46IHByb3BzLmVtYWlsQ29uZmlndXJhdGlvbi5zZXNWZXJpZmllZERvbWFpbkFybixcbiAgICAgICAgZnJvbTogcHJvcHMuZW1haWxDb25maWd1cmF0aW9uLmZyb21OYW1lXG4gICAgICAgICAgPyBgJHtwcm9wcy5lbWFpbENvbmZpZ3VyYXRpb24uZnJvbU5hbWV9IDwke3Byb3BzLmVtYWlsQ29uZmlndXJhdGlvbi5mcm9tRW1haWx9PmBcbiAgICAgICAgICA6IHByb3BzLmVtYWlsQ29uZmlndXJhdGlvbi5mcm9tRW1haWwsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5lbWFpbE90cE1mYSkge1xuICAgICAgY29uc3QgY2ZuUG9vbCA9IHRoaXMudXNlclBvb2wubm9kZS5kZWZhdWx0Q2hpbGQgYXMgY29nbml0by5DZm5Vc2VyUG9vbDtcbiAgICAgIGNmblBvb2wuZW5hYmxlZE1mYXMgPSBbJ0VNQUlMX09UUCddO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5wYXNzd29yZGxlc3NFbWFpbE90cCkge1xuICAgICAgLy8gQ2hvaWNlLWJhc2VkIHNpZ24taW46IEVNQUlMX09UUCBhcyBhIGZpcnN0IGF1dGggZmFjdG9yLiBQQVNTV09SRCBpcyBNQU5EQVRPUllcbiAgICAgIC8vIGluIEFsbG93ZWRGaXJzdEF1dGhGYWN0b3JzIChDb2duaXRvIHJlamVjdHMgYSBsaXN0IHdpdGhvdXQgaXQpLCBzbyBpdCBzdGF5cyDigJRcbiAgICAgIC8vIGJ1dCB0aGUgYXBwIGNsaWVudCBiZWxvdyBkcm9wcyB0aGUgcGFzc3dvcmQgKHVzZXJTcnApIGZsb3cgYW5kIHRoZSBjb25zdW1lcidzXG4gICAgICAvLyBVSSBuZXZlciBvZmZlcnMgaXQsIHNvIHRoZSBwYXNzd29yZCBwYXRoIGlzIHVucmVhY2hhYmxlIHRocm91Z2ggdGhpcyBjbGllbnQuXG4gICAgICBjb25zdCBjZm5Qb29sID0gdGhpcy51c2VyUG9vbC5ub2RlLmRlZmF1bHRDaGlsZCBhcyBjb2duaXRvLkNmblVzZXJQb29sO1xuICAgICAgY2ZuUG9vbC5wb2xpY2llcyA9IHtcbiAgICAgICAgLi4uKGNmblBvb2wucG9saWNpZXMgYXMgY29nbml0by5DZm5Vc2VyUG9vbC5Qb2xpY2llc1Byb3BlcnR5IHwgdW5kZWZpbmVkKSxcbiAgICAgICAgc2lnbkluUG9saWN5OiB7IGFsbG93ZWRGaXJzdEF1dGhGYWN0b3JzOiBbJ1BBU1NXT1JEJywgJ0VNQUlMX09UUCddIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHByZVRva2VuTGFtYmRhID0gcHJvcHMucHJlVG9rZW5HZW5lcmF0aW9uTGFtYmRhID8/IG5ldyBsYW1iZGEuRnVuY3Rpb24odGhpcywgJ1ByZVRva2VuTGFtYmRhJywge1xuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTIsXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xhbWJkYS9wcmUtdG9rZW4nKSksXG4gICAgICB0aW1lb3V0OiBjb3JlLkR1cmF0aW9uLnNlY29uZHMoNSksXG4gICAgfSk7XG4gICAgdGhpcy51c2VyUG9vbC5hZGRUcmlnZ2VyKGNvZ25pdG8uVXNlclBvb2xPcGVyYXRpb24uUFJFX1RPS0VOX0dFTkVSQVRJT05fQ09ORklHLCBwcmVUb2tlbkxhbWJkYSwgY29nbml0by5MYW1iZGFWZXJzaW9uLlYyXzApO1xuXG4gICAgaWYgKHByb3BzLmdyb3Vwcykge1xuICAgICAgZm9yIChjb25zdCBncm91cCBvZiBwcm9wcy5ncm91cHMpIHtcbiAgICAgICAgbmV3IGNvZ25pdG8uQ2ZuVXNlclBvb2xHcm91cCh0aGlzLCBgR3JvdXAke2dyb3VwfWAsIHtcbiAgICAgICAgICB1c2VyUG9vbElkOiB0aGlzLnVzZXJQb29sLnVzZXJQb29sSWQsXG4gICAgICAgICAgZ3JvdXBOYW1lOiBncm91cCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT3B0aW9uYWwgYWR2YW5jZWQtc2VjdXJpdHkgcmlzayBjb25maWd1cmF0aW9uIChMMSkuXG4gICAgaWYgKHByb3BzLmFjY291bnRUYWtlb3ZlclJpc2tDb25maWd1cmF0aW9uIHx8IHByb3BzLmNvbXByb21pc2VkQ3JlZGVudGlhbHNSaXNrQ29uZmlndXJhdGlvbikge1xuICAgICAgbmV3IGNvZ25pdG8uQ2ZuVXNlclBvb2xSaXNrQ29uZmlndXJhdGlvbkF0dGFjaG1lbnQodGhpcywgJ1Jpc2tDb25maWcnLCB7XG4gICAgICAgIHVzZXJQb29sSWQ6IHRoaXMudXNlclBvb2wudXNlclBvb2xJZCxcbiAgICAgICAgY2xpZW50SWQ6ICdBTEwnLFxuICAgICAgICBhY2NvdW50VGFrZW92ZXJSaXNrQ29uZmlndXJhdGlvbjogcHJvcHMuYWNjb3VudFRha2VvdmVyUmlza0NvbmZpZ3VyYXRpb24sXG4gICAgICAgIGNvbXByb21pc2VkQ3JlZGVudGlhbHNSaXNrQ29uZmlndXJhdGlvbjogcHJvcHMuY29tcHJvbWlzZWRDcmVkZW50aWFsc1Jpc2tDb25maWd1cmF0aW9uLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy51c2VyUG9vbENsaWVudHMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IHNwZWMgb2YgcHJvcHMuYXBwQ2xpZW50cykge1xuICAgICAgY29uc3QgY2xpZW50ID0gbmV3IGNvZ25pdG8uVXNlclBvb2xDbGllbnQodGhpcywgYENsaWVudCR7c3BlYy5rZXl9YCwge1xuICAgICAgICB1c2VyUG9vbDogdGhpcy51c2VyUG9vbCxcbiAgICAgICAgZ2VuZXJhdGVTZWNyZXQ6IHNwZWMuZ2VuZXJhdGVTZWNyZXQgPz8gZmFsc2UsXG4gICAgICAgIGF1dGhGbG93czogcHJvcHMucGFzc3dvcmRsZXNzRW1haWxPdHBcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgIC8vIFBhc3N3b3JkbGVzczogZW5hYmxlIGNob2ljZS1iYXNlZCBBTExPV19VU0VSX0FVVEggYW5kIERST1AgdXNlclNycCBzbyB0aGVcbiAgICAgICAgICAgIC8vIHBhc3N3b3JkIGNoYWxsZW5nZSBjYW5ub3QgYmUgaW5pdGlhdGVkIHRocm91Z2ggdGhpcyBjbGllbnQg4oCUIGV2ZW4gYnkgYVxuICAgICAgICAgICAgLy8gZGlyZWN0IEFQSSBjYWxsLiBQQVNTV09SRCBzdGF5cyBhIHBvb2wgZmFjdG9yIChDb2duaXRvJ3MgcnVsZSkgYnV0IGlzXG4gICAgICAgICAgICAvLyB1bnJlYWNoYWJsZSB2aWEgdGhlIHN0b3JlZnJvbnQgY2xpZW50LlxuICAgICAgICAgICAgdXNlcjogdHJ1ZSxcbiAgICAgICAgICAgIGN1c3RvbTogcHJvcHMuZW5hYmxlQ3VzdG9tQXV0aEZsb3cgPz8gZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgdXNlclNycDogdHJ1ZSxcbiAgICAgICAgICAgIGN1c3RvbTogcHJvcHMuZW5hYmxlQ3VzdG9tQXV0aEZsb3cgPz8gZmFsc2UsXG4gICAgICAgICAgICAvLyB1c2VyUGFzc3dvcmQgLyBhZG1pblVzZXJQYXNzd29yZCBpbnRlbnRpb25hbGx5IG9taXR0ZWQgKGRpc2FibGVkKS5cbiAgICAgICAgICB9LFxuICAgICAgICBvQXV0aDoge1xuICAgICAgICAgIGZsb3dzOiB7IGF1dGhvcml6YXRpb25Db2RlR3JhbnQ6IHRydWUgfSxcbiAgICAgICAgICBzY29wZXM6IFtjb2duaXRvLk9BdXRoU2NvcGUuT1BFTklELCBjb2duaXRvLk9BdXRoU2NvcGUuRU1BSUwsIGNvZ25pdG8uT0F1dGhTY29wZS5QUk9GSUxFXSxcbiAgICAgICAgICBjYWxsYmFja1VybHM6IHNwZWMuY2FsbGJhY2tVcmxzLFxuICAgICAgICAgIGxvZ291dFVybHM6IHNwZWMubG9nb3V0VXJscyxcbiAgICAgICAgfSxcbiAgICAgICAgc3VwcG9ydGVkSWRlbnRpdHlQcm92aWRlcnM6IHNwZWMuc3VwcG9ydGVkSWRlbnRpdHlQcm92aWRlcnMgPz8gW2NvZ25pdG8uVXNlclBvb2xDbGllbnRJZGVudGl0eVByb3ZpZGVyLkNPR05JVE9dLFxuICAgICAgICBwcmV2ZW50VXNlckV4aXN0ZW5jZUVycm9yczogdHJ1ZSxcbiAgICAgICAgZW5hYmxlVG9rZW5SZXZvY2F0aW9uOiB0cnVlLFxuICAgICAgICBhY2Nlc3NUb2tlblZhbGlkaXR5OiBwcm9wcy5hY2Nlc3NUb2tlblZhbGlkaXR5ID8/IGNvcmUuRHVyYXRpb24uaG91cnMoMSksXG4gICAgICAgIGlkVG9rZW5WYWxpZGl0eTogcHJvcHMuaWRUb2tlblZhbGlkaXR5ID8/IGNvcmUuRHVyYXRpb24uaG91cnMoMSksXG4gICAgICAgIHJlZnJlc2hUb2tlblZhbGlkaXR5OiBwcm9wcy5yZWZyZXNoVG9rZW5WYWxpZGl0eSA/PyBjb3JlLkR1cmF0aW9uLmRheXMoMzApLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnVzZXJQb29sQ2xpZW50c1tzcGVjLmtleV0gPSBjbGllbnQ7XG4gICAgfVxuICAgIHRoaXMudXNlclBvb2xDbGllbnQgPSB0aGlzLnVzZXJQb29sQ2xpZW50c1twcm9wcy5hcHBDbGllbnRzWzBdLmtleV07XG5cbiAgICB0aGlzLnVzZXJQb29sRG9tYWluID0gdGhpcy51c2VyUG9vbC5hZGREb21haW4oJ0NvZ25pdG9Eb21haW4nLCB7XG4gICAgICBjb2duaXRvRG9tYWluOiB7IGRvbWFpblByZWZpeDogcHJvcHMuY29nbml0b0RvbWFpblByZWZpeCB9LFxuICAgIH0pO1xuICAgIHRoaXMuY29nbml0b0RvbWFpblVybCA9IGAke3Byb3BzLmNvZ25pdG9Eb21haW5QcmVmaXh9LmF1dGguJHtjb3JlLlN0YWNrLm9mKHRoaXMpLnJlZ2lvbn0uYW1hem9uY29nbml0by5jb21gO1xuXG4gICAgaWYgKHByb3BzLmlkZW50aXR5UG9vbCkge1xuICAgICAgY29uc3QgaWRwID0gcHJvcHMuaWRlbnRpdHlQb29sO1xuICAgICAgdGhpcy5pZGVudGl0eVBvb2wgPSBuZXcgY29nbml0by5DZm5JZGVudGl0eVBvb2wodGhpcywgJ0lkZW50aXR5UG9vbCcsIHtcbiAgICAgICAgYWxsb3dVbmF1dGhlbnRpY2F0ZWRJZGVudGl0aWVzOiBpZHAuYWxsb3dVbmF1dGhlbnRpY2F0ZWRJZGVudGl0aWVzID8/IGZhbHNlLFxuICAgICAgICBjb2duaXRvSWRlbnRpdHlQcm92aWRlcnM6IHByb3BzLmFwcENsaWVudHMubWFwKHNwZWMgPT4gKHtcbiAgICAgICAgICBjbGllbnRJZDogdGhpcy51c2VyUG9vbENsaWVudHNbc3BlYy5rZXldLnVzZXJQb29sQ2xpZW50SWQsXG4gICAgICAgICAgcHJvdmlkZXJOYW1lOiB0aGlzLnVzZXJQb29sLnVzZXJQb29sUHJvdmlkZXJOYW1lLFxuICAgICAgICAgIHNlcnZlclNpZGVUb2tlbkNoZWNrOiB0cnVlLFxuICAgICAgICB9KSksXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5hdXRoZW50aWNhdGVkUm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCAnQXV0aGVudGljYXRlZFJvbGUnLCB7XG4gICAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5GZWRlcmF0ZWRQcmluY2lwYWwoXG4gICAgICAgICAgJ2NvZ25pdG8taWRlbnRpdHkuYW1hem9uYXdzLmNvbScsXG4gICAgICAgICAge1xuICAgICAgICAgICAgJ1N0cmluZ0VxdWFscyc6IHsgJ2NvZ25pdG8taWRlbnRpdHkuYW1hem9uYXdzLmNvbTphdWQnOiB0aGlzLmlkZW50aXR5UG9vbC5yZWYgfSxcbiAgICAgICAgICAgICdGb3JBbnlWYWx1ZTpTdHJpbmdMaWtlJzogeyAnY29nbml0by1pZGVudGl0eS5hbWF6b25hd3MuY29tOmFtcic6ICdhdXRoZW50aWNhdGVkJyB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ3N0czpBc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5JyxcbiAgICAgICAgKSxcbiAgICAgICAgbWFuYWdlZFBvbGljaWVzOiBpZHAuYXV0aGVudGljYXRlZFJvbGVNYW5hZ2VkUG9saWNpZXMsXG4gICAgICB9KTtcblxuICAgICAgbmV3IGNvZ25pdG8uQ2ZuSWRlbnRpdHlQb29sUm9sZUF0dGFjaG1lbnQodGhpcywgJ0lkZW50aXR5UG9vbFJvbGVzJywge1xuICAgICAgICBpZGVudGl0eVBvb2xJZDogdGhpcy5pZGVudGl0eVBvb2wucmVmLFxuICAgICAgICByb2xlczogeyBhdXRoZW50aWNhdGVkOiB0aGlzLmF1dGhlbnRpY2F0ZWRSb2xlLnJvbGVBcm4gfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBQkFDOiBtYXAgY2xhaW1zIHRvIHByaW5jaXBhbCB0YWdzIG9uIHRoZSB1c2VyLXBvb2wgcHJvdmlkZXIuXG4gICAgICBpZiAoaWRwLnByaW5jaXBhbFRhZ3MgJiYgT2JqZWN0LmtleXMoaWRwLnByaW5jaXBhbFRhZ3MpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbmV3IGNvZ25pdG8uQ2ZuSWRlbnRpdHlQb29sUHJpbmNpcGFsVGFnKHRoaXMsICdQcmluY2lwYWxUYWdzJywge1xuICAgICAgICAgIGlkZW50aXR5UG9vbElkOiB0aGlzLmlkZW50aXR5UG9vbC5yZWYsXG4gICAgICAgICAgaWRlbnRpdHlQcm92aWRlck5hbWU6IHRoaXMudXNlclBvb2wudXNlclBvb2xQcm92aWRlck5hbWUsXG4gICAgICAgICAgdXNlRGVmYXVsdHM6IGZhbHNlLFxuICAgICAgICAgIHByaW5jaXBhbFRhZ3M6IGlkcC5wcmluY2lwYWxUYWdzLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==