{
  "_format": "hh-sol-artifact-1",
  "contractName": "SwapRouter02",
  "sourceName": "contracts/SwapRouter02.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_factoryClassic",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "factoryCL",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_positionManager",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_SAMB",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "SAMB",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "approveMax",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "approveMaxMinusOne",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "approveZeroThenMax",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "approveZeroThenMaxMinusOne",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int256",
          "name": "amount0Delta",
          "type": "int256"
        },
        {
          "internalType": "int256",
          "name": "amount1Delta",
          "type": "int256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "astraCLSwapCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "callPositionManager",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "result",
          "type": "bytes"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "paths",
          "type": "bytes[]"
        },
        {
          "internalType": "uint128[]",
          "name": "amounts",
          "type": "uint128[]"
        },
        {
          "internalType": "uint24",
          "name": "maximumTickDivergence",
          "type": "uint24"
        },
        {
          "internalType": "uint32",
          "name": "secondsAgo",
          "type": "uint32"
        }
      ],
      "name": "checkOracleSlippage",
      "outputs": [],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "path",
          "type": "bytes"
        },
        {
          "internalType": "uint24",
          "name": "maximumTickDivergence",
          "type": "uint24"
        },
        {
          "internalType": "uint32",
          "name": "secondsAgo",
          "type": "uint32"
        }
      ],
      "name": "checkOracleSlippage",
      "outputs": [],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "path",
              "type": "bytes"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amountIn",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountOutMinimum",
              "type": "uint256"
            }
          ],
          "internalType": "struct ICLSwapRouter.ExactInputParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "exactInput",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "tokenIn",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenOut",
              "type": "address"
            },
            {
              "internalType": "uint24",
              "name": "fee",
              "type": "uint24"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amountIn",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountOutMinimum",
              "type": "uint256"
            },
            {
              "internalType": "uint160",
              "name": "sqrtPriceLimitX96",
              "type": "uint160"
            }
          ],
          "internalType": "struct ICLSwapRouter.ExactInputSingleParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "exactInputSingle",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "path",
              "type": "bytes"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amountOut",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountInMaximum",
              "type": "uint256"
            }
          ],
          "internalType": "struct ICLSwapRouter.ExactOutputParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "exactOutput",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "tokenIn",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenOut",
              "type": "address"
            },
            {
              "internalType": "uint24",
              "name": "fee",
              "type": "uint24"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amountOut",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountInMaximum",
              "type": "uint256"
            },
            {
              "internalType": "uint160",
              "name": "sqrtPriceLimitX96",
              "type": "uint160"
            }
          ],
          "internalType": "struct ICLSwapRouter.ExactOutputSingleParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "exactOutputSingle",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "factory",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "factoryClassic",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "getApprovalType",
      "outputs": [
        {
          "internalType": "enum IApproveAndCall.ApprovalType",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token0",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token1",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount0Min",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Min",
              "type": "uint256"
            }
          ],
          "internalType": "struct IApproveAndCall.IncreaseLiquidityParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "increaseLiquidity",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "result",
          "type": "bytes"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token0",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token1",
              "type": "address"
            },
            {
              "internalType": "uint24",
              "name": "fee",
              "type": "uint24"
            },
            {
              "internalType": "int24",
              "name": "tickLower",
              "type": "int24"
            },
            {
              "internalType": "int24",
              "name": "tickUpper",
              "type": "int24"
            },
            {
              "internalType": "uint256",
              "name": "amount0Min",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Min",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            }
          ],
          "internalType": "struct IApproveAndCall.MintParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "result",
          "type": "bytes"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "previousBlockhash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "multicall",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "multicall",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "multicall",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "results",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "positionManager",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "pull",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "refundAMB",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermit",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermitAllowed",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermitAllowedIfNecessary",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermitIfNecessary",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountOutMin",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "swapExactTokensForTokens",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountInMax",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "swapTokensForExactTokens",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "sweepToken",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        }
      ],
      "name": "sweepToken",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeBips",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "feeRecipient",
          "type": "address"
        }
      ],
      "name": "sweepTokenWithFee",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "feeBips",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "feeRecipient",
          "type": "address"
        }
      ],
      "name": "sweepTokenWithFee",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "unwrapSAMB",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        }
      ],
      "name": "unwrapSAMB",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "feeBips",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "feeRecipient",
          "type": "address"
        }
      ],
      "name": "unwrapSAMBWithFee",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeBips",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "feeRecipient",
          "type": "address"
        }
      ],
      "name": "unwrapSAMBWithFee",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "wrapAMB",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x6101006040526000196000553480156200001857600080fd5b506040516200612f3803806200612f8339810160408190526200003b9162000087565b6001600160601b0319606094851b811660805291841b821660a05291831b811660c052911b1660e052620000e3565b80516001600160a01b03811681146200008257600080fd5b919050565b600080600080608085870312156200009d578384fd5b620000a8856200006a565b9350620000b8602086016200006a565b9250620000c8604086016200006a565b9150620000d8606086016200006a565b905092959194509250565b60805160601c60a05160601c60c05160601c60e05160601c615fab62000184600039806102c1528061154d528061158d52806116b75280611860528061198a528061236852806129b95280612a195280612a9a5250806109615280611f085280613cd55250806115295280611bca5280611f5e52806131d6525080610d1c5280610df0528061109052806113595280612ef252806130b55250615fab6000f3fe6080604052600436106102a45760003560e01c8063ab3fdd501161016e578063dee00f35116100cb578063efdeed8e1161007f578063f25801a711610064578063f25801a71461066e578063f2d5d56b1461068e578063f3995c67146106a15761034f565b8063efdeed8e1461063b578063f100b2051461065b5761034f565b8063e0e189a0116100b0578063e0e189a014610602578063e4a4054514610615578063e90a182f146106285761034f565b8063dee00f35146105c2578063df2ab5bb146105ef5761034f565b8063bc122a5411610122578063c45a015511610107578063c45a015514610592578063c53af304146105a7578063cab372ce146105af5761034f565b8063bc122a541461056c578063c2e3140a1461057f5761034f565b8063acf8a4ed11610153578063acf8a4ed14610533578063b3a2af1314610546578063b858183f146105595761034f565b8063ab3fdd501461050d578063ac9650d8146105205761034f565b80634f04a0db1161021c578063791b98bc116101d057806397e87d9d116101b557806397e87d9d146104d4578063a4a78f0c146104e7578063a98ce37f146104fa5761034f565b8063791b98bc146104aa57806390793ea8146104bf5761034f565b8063571ac8b011610201578063571ac8b0146104715780635ae401dc14610484578063639d71a9146104975761034f565b80634f04a0db1461043c5780635023b4df1461045e5761034f565b80631f0464d11161027357806342712a671161025857806342712a67146104035780634659a49414610416578063472b43f3146104295761034f565b80631f0464d1146103d05780633068c554146103f05761034f565b806304e45aaf1461035457806309b813461461037d57806311c178481461039057806311ed56c9146103b05761034f565b3661034f573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461034d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e6f742053414d42000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b61036761036236600461553d565b6106b4565b6040516103749190615df7565b60405180910390f35b61036761038b3660046155d8565b61083c565b34801561039c57600080fd5b5061034d6103ab3660046153b2565b61091c565b6103c36103be366004615632565b610a6c565b6040516103749190615b74565b6103e36103de3660046152a1565b610c78565b6040516103749190615af6565b61034d6103fe3660046150d2565b610d02565b61036761041136600461587f565b610d15565b61034d61042436600461511b565b610eef565b61036761043736600461587f565b610fa3565b34801561044857600080fd5b50610451611357565b6040516103749190615a36565b61036761046c366004615610565b61137b565b61034d61047f366004614fe5565b611464565b6103e36104923660046152a1565b61149a565b61034d6104a5366004614fe5565b611513565b3480156104b657600080fd5b50610451611527565b3480156104cb57600080fd5b5061045161154b565b61034d6104e2366004615814565b61156f565b61034d6104f536600461511b565b611787565b61034d6105083660046157e5565b61185c565b61034d61051b366004614fe5565b611a22565b6103e361052e366004615176565b611a60565b61034d6105413660046157b5565b611bba565b6103c36105543660046152eb565b611bc4565b610367610567366004615497565b611c82565b61034d61057a366004615852565b611e45565b61034d61058d36600461511b565b611e51565b34801561059e57600080fd5b50610451611f06565b61034d611f2a565b61034d6105bd366004614fe5565b611a36565b3480156105ce57600080fd5b506105e26105dd366004615008565b611f3c565b6040516103749190615b87565b61034d6105fd366004615033565b6120e9565b61034d610610366004615074565b612200565b61034d6106233660046157b5565b612366565b61034d610636366004615008565b6123e2565b34801561064757600080fd5b5061034d6106563660046151b6565b6123f1565b6103c3610669366004615621565b612443565b34801561067a57600080fd5b5061034d61068936600461531e565b6124e3565b61034d61069c366004615008565b612534565b61034d6106af36600461511b565b612540565b600080600083608001511415610771575081516040517f70a0823100000000000000000000000000000000000000000000000000000000815260019173ffffffffffffffffffffffffffffffffffffffff16906370a082319061071b903090600401615a36565b60206040518083038186803b15801561073357600080fd5b505afa158015610747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076b91906157cd565b60808401525b6107ed836080015184606001518560c001516040518060400160405280886000015189604001518a602001516040516020016107af939291906159a4565b6040516020818303038152906040528152602001866107ce57336107d0565b305b73ffffffffffffffffffffffffffffffffffffffff1690526125d8565b91508260a00151821015610836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c77565b60405180910390fd5b50919050565b60006108b0604083018035906108559060208601614fe5565b604080518082019091526000908061086d8880615e3b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525033602090910152612789565b505060005460608201358111156108f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c09565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b600084138061092b5750600083135b61093457600080fd5b600061094282840184615644565b905060008060006109568460000151612970565b9250925092506109887f00000000000000000000000000000000000000000000000000000000000000008484846129a1565b5060008060008a136109c9578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610896109fa565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16108a5b915091508115610a1957610a1485876020015133846129b7565b610a60565b8551610a2490612b95565b15610a49578551610a3490612b9d565b8652610a438133600089612789565b50610a60565b80600081905550610a6084876020015133846129b7565b50505050505050505050565b604080516101608101909152606090610c70907f88316456000000000000000000000000000000000000000000000000000000009080610aaf6020870187614fe5565b73ffffffffffffffffffffffffffffffffffffffff168152602001856020016020810190610add9190614fe5565b73ffffffffffffffffffffffffffffffffffffffff168152602001610b08606087016040880161579b565b62ffffff168152602001610b226080870160608801615373565b60020b8152602001610b3a60a0870160808801615373565b60020b8152602090810190610b5a90610b5590880188614fe5565b612bd2565b8152602001610b75866020016020810190610b559190614fe5565b815260a0860135602082015260c08601356040820152606001610b9f610100870160e08801614fe5565b73ffffffffffffffffffffffffffffffffffffffff1681526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff815250604051602401610bee9190615cf2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611bc4565b90505b919050565b60608380600143034014610ced57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f426c6f636b686173680000000000000000000000000000000000000000000000604482015290519081900360640190fd5b610cf78484611a60565b91505b509392505050565b610d0f8484338585612200565b50505050565b6000610d757f000000000000000000000000000000000000000000000000000000000000000087868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612c7792505050565b600081518110610d8157fe5b6020026020010151905084811115610dc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c09565b610e5e84846000818110610dd557fe5b9050602002016020810190610dea9190614fe5565b33610e587f000000000000000000000000000000000000000000000000000000000000000088886000818110610e1c57fe5b9050602002016020810190610e319190614fe5565b89896001818110610e3e57fe5b9050602002016020810190610e539190614fe5565b612db0565b846129b7565b73ffffffffffffffffffffffffffffffffffffffff821660011415610e8557339150610ea8565b73ffffffffffffffffffffffffffffffffffffffff821660021415610ea8573091505b610ee6848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250869250612e9b915050565b95945050505050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b158015610f8f57600080fd5b505af1158015610a60573d6000803e3d6000fd5b60008086611059575060018484600081610fb957fe5b9050602002016020810190610fce9190614fe5565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110069190615a36565b60206040518083038186803b15801561101e57600080fd5b505afa158015611032573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105691906157cd565b96505b6110e48585600081811061106957fe5b905060200201602081019061107e9190614fe5565b82611089573361108b565b305b6110de7f0000000000000000000000000000000000000000000000000000000000000000898960008181106110bc57fe5b90506020020160208101906110d19190614fe5565b8a8a6001818110610e3e57fe5b8a6129b7565b73ffffffffffffffffffffffffffffffffffffffff83166001141561110b5733925061112e565b73ffffffffffffffffffffffffffffffffffffffff83166002141561112e573092505b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061115e57fe5b90506020020160208101906111739190614fe5565b73ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016111ab9190615a36565b60206040518083038186803b1580156111c357600080fd5b505afa1580156111d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111fb91906157cd565b905061123b868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250889250612e9b915050565b6113108187877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061126d57fe5b90506020020160208101906112829190614fe5565b73ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b81526004016112ba9190615a36565b60206040518083038186803b1580156112d257600080fd5b505afa1580156112e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130a91906157cd565b906131a0565b92508683101561134c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c77565b505095945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000611424608083018035906113949060608601614fe5565b6113a460e0860160c08701614fe5565b60405180604001604052808760200160208101906113c29190614fe5565b6113d260608a0160408b0161579b565b6113df60208b018b614fe5565b6040516020016113f1939291906159a4565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff16815250612789565b90508160a001358111156108f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c09565b61148e817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6131b0565b61149757600080fd5b50565b606083806114a66132fc565b1115610ced57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b61151e8160006131b0565b61146457600080fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600082118015611580575060648211155b61158957600080fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561161257600080fd5b505afa158015611626573d6000803e3d6000fd5b505050506040513d602081101561163c57600080fd5b50519050848110156116af57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e73756666696369656e742053414d42000000000000000000000000000000604482015290519081900360640190fd5b8015611780577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561172857600080fd5b505af115801561173c573d6000803e3d6000fd5b505050506000612710611758858461330090919063ffffffff16565b8161175f57fe5b0490508015611772576117728382613324565b61177e85828403613324565b505b5050505050565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b15801561181c57600080fd5b505afa158015611830573d6000803e3d6000fd5b505050506040513d602081101561184657600080fd5b5051101561177e5761177e868686868686610eef565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156118e557600080fd5b505afa1580156118f9573d6000803e3d6000fd5b505050506040513d602081101561190f57600080fd5b505190508281101561198257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e73756666696369656e742053414d42000000000000000000000000000000604482015290519081900360640190fd5b8015611a1d577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156119fb57600080fd5b505af1158015611a0f573d6000803e3d6000fd5b50505050611a1d8282613324565b505050565b611a2d8160006131b0565b611a3657600080fd5b61148e817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6131b0565b60608167ffffffffffffffff81118015611a7957600080fd5b50604051908082528060200260200182016040528015611aad57816020015b6060815260200190600190039081611a985790505b50905060005b82811015611bb35760008030868685818110611acb57fe5b9050602002810190611add9190615e3b565b604051611aeb929190615a0a565b600060405180830381855af49150503d8060008114611b26576040519150601f19603f3d011682016040523d82523d6000602084013e611b2b565b606091505b509150915081611b9157604481511015611b4457600080fd5b60048101905080806020019051810190611b5e919061542d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d9190615b74565b80848481518110611b9e57fe5b60209081029190910101525050600101611ab3565b5092915050565b611497813361185c565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1683604051611c0d9190615a1a565b6000604051808303816000865af19150503d8060008114611c4a576040519150601f19603f3d011682016040523d82523d6000602084013e611c4f565b606091505b50925090508061083657604482511015611c6857600080fd5b60048201915081806020019051810190611b5e919061542d565b600080600083604001511415611d5357600190506000611ca58460000151612970565b50506040517f70a0823100000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906370a0823190611cfc903090600401615a36565b60206040518083038186803b158015611d1457600080fd5b505afa158015611d28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4c91906157cd565b6040850152505b600081611d605733611d62565b305b90505b6000611d748560000151612b95565b9050611dcd856040015182611d8d578660200151611d8f565b305b60006040518060400160405280611da98b60000151613472565b81526020018773ffffffffffffffffffffffffffffffffffffffff168152506125d8565b60408601528015611ded578451309250611de690612b9d565b8552611dfa565b8460400151935050611e00565b50611d65565b8360600151831015611e3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c77565b5050919050565b611a1d8333848461156f565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015611ec657600080fd5b505afa158015611eda573d6000803e3d6000fd5b505050506040513d6020811015611ef057600080fd5b5051101561177e5761177e868686868686612540565b7f000000000000000000000000000000000000000000000000000000000000000081565b4715611f3a57611f3a3347613324565b565b6000818373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e307f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b8152600401611f9a929190615a57565b60206040518083038186803b158015611fb257600080fd5b505afa158015611fc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fea91906157cd565b10611ff7575060006120e3565b612021837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6131b0565b1561202e575060016120e3565b612058837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6131b0565b15612065575060026120e3565b6120708360006131b0565b61207957600080fd5b6120a3837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6131b0565b156120b0575060036120e3565b6120da837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6131b0565b1561034f575060045b92915050565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561215257600080fd5b505afa158015612166573d6000803e3d6000fd5b505050506040513d602081101561217c57600080fd5b50519050828110156121ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b8015610d0f57610d0f848383613481565b600082118015612211575060648211155b61221a57600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561228357600080fd5b505afa158015612297573d6000803e3d6000fd5b505050506040513d60208110156122ad57600080fd5b505190508481101561232057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b801561177e5760006127106123358386613300565b8161233c57fe5b049050801561235057612350878483613481565b61235d8786838503613481565b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123ce57600080fd5b505af115801561177e573d6000803e3d6000fd5b6123ed8282336120e9565b5050565b6000806123ff868685613656565b915091508362ffffff168183031261177e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c40565b6060610c7063219f5d1760e01b6040518060c001604052808560400135815260200161247b866000016020810190610b559190614fe5565b8152602001612496866020016020810190610b559190614fe5565b815260200185606001358152602001856080013581526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff815250604051602401610bee9190615cae565b6000806124f08584613869565b915091508362ffffff1681830312611780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c40565b6123ed82333084613af1565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b158015610f8f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff84166001141561260157339350612624565b73ffffffffffffffffffffffffffffffffffffffff841660021415612624573093505b60008060006126368560000151612970565b9194509250905073ffffffffffffffffffffffffffffffffffffffff80831690841610600080612667868686613cce565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b8561268d8f613d0c565b73ffffffffffffffffffffffffffffffffffffffff8e16156126af578d6126d5565b876126ce5773fffd8963efd1fc6a506488495d951d5263988d256126d5565b6401000276a45b8d6040516020016126e69190615da0565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401612715959493929190615a7e565b6040805180830381600087803b15801561272e57600080fd5b505af1158015612742573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612766919061538f565b91509150826127755781612777565b805b6000039b9a5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8416600114156127b2573393506127d5565b73ffffffffffffffffffffffffffffffffffffffff8416600214156127d5573093505b60008060006127e78560000151612970565b9194509250905073ffffffffffffffffffffffffffffffffffffffff80841690831610600080612818858786613cce565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b8561283e8f613d0c565b60000373ffffffffffffffffffffffffffffffffffffffff8e1615612863578d612889565b876128825773fffd8963efd1fc6a506488495d951d5263988d25612889565b6401000276a45b8d60405160200161289a9190615da0565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016128c9959493929190615a7e565b6040805180830381600087803b1580156128e257600080fd5b505af11580156128f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291a919061538f565b9150915060008361292f578183600003612935565b82826000035b909850905073ffffffffffffffffffffffffffffffffffffffff8a16612961578b811461296157600080fd5b50505050505050949350505050565b6000808061297e8482613d3e565b925061298b846014613e3e565b9050612998846017613d3e565b91509193909250565b6000610ee6856129b2868686613f2e565b613fab565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612a125750804710155b15612b5b577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a7f57600080fd5b505af1158015612a93573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b2957600080fd5b505af1158015612b3d573d6000803e3d6000fd5b505050506040513d6020811015612b5357600080fd5b50610d0f9050565b73ffffffffffffffffffffffffffffffffffffffff8316301415612b8957612b84848383613481565b610d0f565b610d0f84848484613af1565b516042111590565b8051606090610c709083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe901613fdb565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190612c27903090600401615a36565b60206040518083038186803b158015612c3f57600080fd5b505afa158015612c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7091906157cd565b6060600282511015612c8857600080fd5b815167ffffffffffffffff81118015612ca057600080fd5b50604051908082528060200260200182016040528015612cca578160200160208202803683370190505b5090508281600183510381518110612cde57fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b8015610cfa57600080612d4b87866001860381518110612d2a57fe5b6020026020010151878681518110612d3e57fe5b60200260200101516141c2565b91509150612d6d848481518110612d5e57fe5b602002602001015183836142aa565b846001850381518110612d7c57fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612d0e565b6000806000612dbf8585614380565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f400e13fc6c59224f20228f0c0561806856ac34b7318f337f8012707c880c351f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b60005b6001835103811015611a1d57600080848381518110612eb957fe5b6020026020010151858460010181518110612ed057fe5b6020026020010151915091506000612ee88383614380565b5090506000612f187f00000000000000000000000000000000000000000000000000000000000000008585612db0565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612f6657600080fd5b505afa158015612f7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9e91906156d4565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691506000808773ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614613000578284613003565b83835b91509150613044828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b81526004016112ba9190615a36565b9550613051868383614425565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461309557826000613099565b6000835b91509150600060028c51038a106130b0578a6130f1565b6130f17f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106130e457fe5b6020026020010151612db0565b604080516000815260208101918290527f022c0d9f0000000000000000000000000000000000000000000000000000000090915290915073ffffffffffffffffffffffffffffffffffffffff87169063022c0d9f906131599086908690869060248101615e00565b600060405180830381600087803b15801561317357600080fd5b505af1158015613187573d6000803e3d6000fd5b50506001909b019a50612e9e9950505050505050505050565b808203828111156120e357600080fd5b60008060008473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360e01b7f000000000000000000000000000000000000000000000000000000000000000086604051602401613207929190615ad0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516132909190615a1a565b6000604051808303816000865af19150503d80600081146132cd576040519150601f19603f3d011682016040523d82523d6000602084013e6132d2565b606091505b5091509150818015610ee6575080511580610ee6575080806020019051810190610ee69190615287565b4290565b600082158061331b5750508181028183828161331857fe5b04145b6120e357600080fd5b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b6020831061339b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161335e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146133fd576040519150601f19603f3d011682016040523d82523d6000602084013e613402565b606091505b5050905080611a1d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6060610c70826000602b613fdb565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b6020831061355657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613519565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146135b8576040519150601f19603f3d011682016040523d82523d6000602084013e6135bd565b606091505b50915091508180156135eb5750805115806135eb57508080602001905160208110156135e857600080fd5b50515b61178057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080835185511461366757600080fd5b6000855167ffffffffffffffff8111801561368157600080fd5b506040519080825280602002602001820160405280156136bb57816020015b6136a8614e2e565b8152602001906001900390816136a05790505b5090506000865167ffffffffffffffff811180156136d857600080fd5b5060405190808252806020026020018201604052801561371257816020015b6136ff614e2e565b8152602001906001900390816136f75790505b50905060005b8751811015613842576000806137418a848151811061373357fe5b602002602001015189613869565b9150915061374e826144fb565b85848151811061375a57fe5b60200260200101516000019060020b908160020b8152505061377b816144fb565b84848151811061378757fe5b60200260200101516000019060020b908160020b815250508883815181106137ab57fe5b60200260200101518584815181106137bf57fe5b6020026020010151602001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff168152505088838151811061380157fe5b602002602001015184848151811061381557fe5b6020908102919091018101516fffffffffffffffffffffffffffffffff9092169101525050600101613718565b5061384c8261450c565b60020b935061385a8161450c565b60020b92505050935093915050565b600080600080613878866145f4565b90506000805b82811015613a965760008060006138948b612970565b92509250925060006138a7848484613cce565b905060008063ffffffff8d166138d0576138c08361461f565b600291820b9350900b9050613972565b6138da838e6148b7565b8160020b915050809250508273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561392b57600080fd5b505afa15801561393f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613963919061570f565b50505060029290920b93505050505b600189038714156139b3578473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161099506139c2565b6139bc8e612b9d565b9d508597505b6000871580613a6357508673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1610613a33578673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610613a63565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16105b90508015613a78579b82019b9a81019a613a83565b828d039c50818c039b505b50506001909501945061387e9350505050565b5082613ae7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850294507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff840293505b5050509250929050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b60208310613bce57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613b91565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c30576040519150601f19603f3d011682016040523d82523d6000602084013e613c35565b606091505b5091509150818015613c63575080511580613c635750808060200190516020811015613c6057600080fd5b50515b61177e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000613d047f0000000000000000000000000000000000000000000000000000000000000000613cff868686613f2e565b614ce8565b949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008210613d3a57600080fd5b5090565b600081826014011015613db257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b8160140183511015613e2557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b600081826003011015613eb257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b8160030183511015613f2557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b613f36614e45565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115613f6e579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000613fb78383614ce8565b90503373ffffffffffffffffffffffffffffffffffffffff8216146120e357600080fd5b60608182601f01101561404f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b8282840110156140c057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b8183018451101561413257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b60608215801561415157604051915060008252602082016040526141b9565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561418a578051835260209283019201614172565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60008060006141d18585614380565b5090506000806141e2888888612db0565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561422757600080fd5b505afa15801561423b573d6000803e3d6000fd5b505050506040513d606081101561425157600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff8781169084161461429857808261429b565b81815b90999098509650505050505050565b600080841161431a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f494e53554646494349454e545f4f55545055545f414d4f554e54000000000000604482015290519081900360640190fd5b60008311801561432a5750600082115b61433357600080fd5b600061434b6103e86143458688613300565b90613300565b9050600061435f6103e561434586896131a0565b9050614376600182848161436f57fe5b0490614e1e565b9695505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156143bc57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106143f65782846143f9565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff821661441e57600080fd5b9250929050565b600080841161449557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f494e53554646494349454e545f494e5055545f414d4f554e5400000000000000604482015290519081900360640190fd5b6000831180156144a55750600082115b6144ae57600080fd5b60006144bc856103e5613300565b905060006144ca8285613300565b905060006144e4836144de886103e8613300565b90614e1e565b90508082816144ef57fe5b04979650505050505050565b80600281900b8114610c7357600080fd5b6000806000805b84518110156145a15784818151811061452857fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff1685828151811061455257fe5b60200260200101516000015160020b028301925084818151811061457257fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff16820191508080600101915050614513565b508082816145ab57fe5b0592506000821280156145c657508082816145c257fe5b0715155b15611e3e5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01919050565b5160177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec9091010490565b6000806000808473ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561466b57600080fd5b505afa15801561467f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146a3919061570f565b50939750919550935050600161ffff84161191506146ef9050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615bd2565b6000808673ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b815260040161472b9190615de8565b60806040518083038186803b15801561474357600080fd5b505afa158015614757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061477b91906158da565b5050915091506147896132fc565b63ffffffff168263ffffffff16146147a3578495506148ae565b60008361ffff1660018561ffff168761ffff160103816147bf57fe5b06905060008060008a73ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b81526004016148009190615df7565b60806040518083038186803b15801561481857600080fd5b505afa15801561482c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061485091906158da565b935050925092508061488e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615b9b565b82860363ffffffff811683870360060b816148a557fe5b059a5050505050505b50505050915091565b60008063ffffffff831661492c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f4250000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516002808252606082018352600092602083019080368337019050509050838160008151811061495b57fe5b602002602001019063ffffffff16908163ffffffff168152505060008160018151811061498457fe5b63ffffffff9092166020928302919091018201526040517f883bdbfd00000000000000000000000000000000000000000000000000000000815260048101828152835160248301528351600093849373ffffffffffffffffffffffffffffffffffffffff8b169363883bdbfd9388939192839260449091019185820191028083838b5b83811015614a1f578181015183820152602001614a07565b505050509050019250505060006040518083038186803b158015614a4257600080fd5b505afa158015614a56573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040908152811015614a9d57600080fd5b8101908080516040519392919084640100000000821115614abd57600080fd5b908301906020820185811115614ad257600080fd5b8251866020820283011164010000000082111715614aef57600080fd5b82525081516020918201928201910280838360005b83811015614b1c578181015183820152602001614b04565b5050505090500160405260200180516040519392919084640100000000821115614b4557600080fd5b908301906020820185811115614b5a57600080fd5b8251866020820283011164010000000082111715614b7757600080fd5b82525081516020918201928201910280838360005b83811015614ba4578181015183820152602001614b8c565b5050505090500160405250505091509150600082600081518110614bc457fe5b602002602001015183600181518110614bd957fe5b6020026020010151039050600082600081518110614bf357fe5b602002602001015183600181518110614c0857fe5b60200260200101510390508763ffffffff168260060b81614c2557fe5b05965060008260060b128015614c4f57508763ffffffff168260060b81614c4857fe5b0760060b15155b15614c7a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909601955b63ffffffff881673ffffffffffffffffffffffffffffffffffffffff0277ffffffffffffffffffffffffffffffffffffffff00000000602083901b1677ffffffffffffffffffffffffffffffffffffffffffffffff821681614cd857fe5b0496505050505050509250929050565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610614d2a57600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527f203c8ec649b23b7faf9b73ccadfb1a67af52a097119c82801f4947ec5deb6c0460d5808301919091528251808303909101815260f5909101909152805191012090565b808201828110156120e357600080fd5b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b8035610c7381615f4c565b60008083601f840112614e81578182fd5b50813567ffffffffffffffff811115614e98578182fd5b602083019150836020808302850101111561441e57600080fd5b600082601f830112614ec2578081fd5b81356020614ed7614ed283615ec2565b615e9e565b8281528181019085830183850287018401881015614ef3578586fd5b855b85811015614f2e5781356fffffffffffffffffffffffffffffffff81168114614f1c578788fd5b84529284019290840190600101614ef5565b5090979650505050505050565b80518015158114610c7357600080fd5b600082601f830112614f5b578081fd5b8135614f69614ed282615ee0565b818152846020838601011115614f7d578283fd5b816020850160208301379081016020019190915292915050565b80516dffffffffffffffffffffffffffff81168114610c7357600080fd5b805161ffff81168114610c7357600080fd5b803562ffffff81168114610c7357600080fd5b8035610c7381615f7d565b600060208284031215614ff6578081fd5b813561500181615f4c565b9392505050565b6000806040838503121561501a578081fd5b823561502581615f4c565b946020939093013593505050565b600080600060608486031215615047578081fd5b833561505281615f4c565b925060208401359150604084013561506981615f4c565b809150509250925092565b600080600080600060a0868803121561508b578283fd5b853561509681615f4c565b94506020860135935060408601356150ad81615f4c565b92506060860135915060808601356150c481615f4c565b809150509295509295909350565b600080600080608085870312156150e7578182fd5b84356150f281615f4c565b93506020850135925060408501359150606085013561511081615f4c565b939692955090935050565b60008060008060008060c08789031215615133578384fd5b863561513e81615f4c565b95506020870135945060408701359350606087013561515c81615f8f565b9598949750929560808101359460a0909101359350915050565b60008060208385031215615188578182fd5b823567ffffffffffffffff81111561519e578283fd5b6151aa85828601614e70565b90969095509350505050565b600080600080608085870312156151cb578182fd5b843567ffffffffffffffff808211156151e2578384fd5b818701915087601f8301126151f5578384fd5b81356020615205614ed283615ec2565b82815281810190858301885b8581101561523a576152288e8684358b0101614f4b565b84529284019290840190600101615211565b50909950505088013592505080821115615252578384fd5b5061525f87828801614eb2565b93505061526e60408601614fc7565b915061527c60608601614fda565b905092959194509250565b600060208284031215615298578081fd5b61500182614f3b565b6000806000604084860312156152b5578081fd5b83359250602084013567ffffffffffffffff8111156152d2578182fd5b6152de86828701614e70565b9497909650939450505050565b6000602082840312156152fc578081fd5b813567ffffffffffffffff811115615312578182fd5b613d0484828501614f4b565b600080600060608486031215615332578081fd5b833567ffffffffffffffff811115615348578182fd5b61535486828701614f4b565b93505061536360208501614fc7565b9150604084013561506981615f7d565b600060208284031215615384578081fd5b813561500181615f6e565b600080604083850312156153a1578182fd5b505080516020909101519092909150565b600080600080606085870312156153c7578182fd5b8435935060208501359250604085013567ffffffffffffffff808211156153ec578384fd5b818701915087601f8301126153ff578384fd5b81358181111561540d578485fd5b88602082850101111561541e578485fd5b95989497505060200194505050565b60006020828403121561543e578081fd5b815167ffffffffffffffff811115615454578182fd5b8201601f81018413615464578182fd5b8051615472614ed282615ee0565b818152856020838501011115615486578384fd5b610ee6826020830160208601615f20565b6000602082840312156154a8578081fd5b813567ffffffffffffffff808211156154bf578283fd5b90830190608082860312156154d2578283fd5b6040516080810181811083821117156154e757fe5b6040528235828111156154f8578485fd5b61550487828601614f4b565b8252506020830135915061551782615f4c565b816020820152604083013560408201526060830135606082015280935050505092915050565b600060e0828403121561554e578081fd5b60405160e0810181811067ffffffffffffffff8211171561556b57fe5b60405261557783614e65565b815261558560208401614e65565b602082015261559660408401614fc7565b60408201526155a760608401614e65565b60608201526080830135608082015260a083013560a08201526155cc60c08401614e65565b60c08201529392505050565b6000602082840312156155e9578081fd5b813567ffffffffffffffff8111156155ff578182fd5b820160808185031215615001578182fd5b600060e08284031215610836578081fd5b600060a08284031215610836578081fd5b60006101008284031215610836578081fd5b600060208284031215615655578081fd5b813567ffffffffffffffff8082111561566c578283fd5b908301906040828603121561567f578283fd5b60405160408101818110838211171561569457fe5b6040528235828111156156a5578485fd5b6156b187828601614f4b565b825250602083013592506156c483615f4c565b6020810192909252509392505050565b6000806000606084860312156156e8578081fd5b6156f184614f97565b92506156ff60208501614f97565b9150604084015161506981615f7d565b600080600080600080600060e0888a031215615729578485fd5b875161573481615f4c565b602089015190975061574581615f6e565b955061575360408901614fb5565b945061576160608901614fb5565b935061576f60808901614fb5565b925060a088015161577f81615f8f565b915061578d60c08901614f3b565b905092959891949750929550565b6000602082840312156157ac578081fd5b61500182614fc7565b6000602082840312156157c6578081fd5b5035919050565b6000602082840312156157de578081fd5b5051919050565b600080604083850312156157f7578182fd5b82359150602083013561580981615f4c565b809150509250929050565b60008060008060808587031215615829578182fd5b84359350602085013561583b81615f4c565b925060408501359150606085013561511081615f4c565b600080600060608486031215615866578081fd5b8335925060208401359150604084013561506981615f4c565b600080600080600060808688031215615896578283fd5b8535945060208601359350604086013567ffffffffffffffff8111156158ba578384fd5b6158c688828901614e70565b90945092505060608601356150c481615f4c565b600080600080608085870312156158ef578182fd5b84516158fa81615f7d565b8094505060208501518060060b8114615911578283fd5b604086015190935061592281615f4c565b915061527c60608601614f3b565b73ffffffffffffffffffffffffffffffffffffffff169052565b60008151808452615962816020860160208601615f20565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60020b9052565b62ffffff169052565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b6000828483379101908152919050565b60008251615a2c818460208701615f20565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152615ac560a083018461594a565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015615b67577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452615b5585835161594a565b94509285019290850190600101615b1b565b5092979650505050505050565b600060208252615001602083018461594a565b6020810160058310615b9557fe5b91905290565b60208082526003908201527f4f4e490000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526003908201527f4e454f0000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526012908201527f546f6f206d756368207265717565737465640000000000000000000000000000604082015260600190565b60208082526002908201527f5444000000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526013908201527f546f6f206c6974746c6520726563656976656400000000000000000000000000604082015260600190565b600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b600061016082019050615d06828451615930565b6020830151615d186020840182615930565b506040830151615d2b604084018261599b565b506060830151615d3e6060840182615994565b506080830151615d516080840182615994565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151615d8f82850182615930565b505061014092830151919092015290565b600060208252825160406020840152615dbc606084018261594a565b905073ffffffffffffffffffffffffffffffffffffffff60208501511660408401528091505092915050565b61ffff91909116815260200190565b90815260200190565b600085825284602083015273ffffffffffffffffffffffffffffffffffffffff8416604083015260806060830152614376608083018461594a565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615e6f578283fd5b83018035915067ffffffffffffffff821115615e89578283fd5b60200191503681900382131561441e57600080fd5b60405181810167ffffffffffffffff81118282101715615eba57fe5b604052919050565b600067ffffffffffffffff821115615ed657fe5b5060209081020190565b600067ffffffffffffffff821115615ef457fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015615f3b578181015183820152602001615f23565b83811115610d0f5750506000910152565b73ffffffffffffffffffffffffffffffffffffffff8116811461149757600080fd5b8060020b811461149757600080fd5b63ffffffff8116811461149757600080fd5b60ff8116811461149757600080fdfea164736f6c6343000706000a",
  "deployedBytecode": "0x6080604052600436106102a45760003560e01c8063ab3fdd501161016e578063dee00f35116100cb578063efdeed8e1161007f578063f25801a711610064578063f25801a71461066e578063f2d5d56b1461068e578063f3995c67146106a15761034f565b8063efdeed8e1461063b578063f100b2051461065b5761034f565b8063e0e189a0116100b0578063e0e189a014610602578063e4a4054514610615578063e90a182f146106285761034f565b8063dee00f35146105c2578063df2ab5bb146105ef5761034f565b8063bc122a5411610122578063c45a015511610107578063c45a015514610592578063c53af304146105a7578063cab372ce146105af5761034f565b8063bc122a541461056c578063c2e3140a1461057f5761034f565b8063acf8a4ed11610153578063acf8a4ed14610533578063b3a2af1314610546578063b858183f146105595761034f565b8063ab3fdd501461050d578063ac9650d8146105205761034f565b80634f04a0db1161021c578063791b98bc116101d057806397e87d9d116101b557806397e87d9d146104d4578063a4a78f0c146104e7578063a98ce37f146104fa5761034f565b8063791b98bc146104aa57806390793ea8146104bf5761034f565b8063571ac8b011610201578063571ac8b0146104715780635ae401dc14610484578063639d71a9146104975761034f565b80634f04a0db1461043c5780635023b4df1461045e5761034f565b80631f0464d11161027357806342712a671161025857806342712a67146104035780634659a49414610416578063472b43f3146104295761034f565b80631f0464d1146103d05780633068c554146103f05761034f565b806304e45aaf1461035457806309b813461461037d57806311c178481461039057806311ed56c9146103b05761034f565b3661034f573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461034d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e6f742053414d42000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b61036761036236600461553d565b6106b4565b6040516103749190615df7565b60405180910390f35b61036761038b3660046155d8565b61083c565b34801561039c57600080fd5b5061034d6103ab3660046153b2565b61091c565b6103c36103be366004615632565b610a6c565b6040516103749190615b74565b6103e36103de3660046152a1565b610c78565b6040516103749190615af6565b61034d6103fe3660046150d2565b610d02565b61036761041136600461587f565b610d15565b61034d61042436600461511b565b610eef565b61036761043736600461587f565b610fa3565b34801561044857600080fd5b50610451611357565b6040516103749190615a36565b61036761046c366004615610565b61137b565b61034d61047f366004614fe5565b611464565b6103e36104923660046152a1565b61149a565b61034d6104a5366004614fe5565b611513565b3480156104b657600080fd5b50610451611527565b3480156104cb57600080fd5b5061045161154b565b61034d6104e2366004615814565b61156f565b61034d6104f536600461511b565b611787565b61034d6105083660046157e5565b61185c565b61034d61051b366004614fe5565b611a22565b6103e361052e366004615176565b611a60565b61034d6105413660046157b5565b611bba565b6103c36105543660046152eb565b611bc4565b610367610567366004615497565b611c82565b61034d61057a366004615852565b611e45565b61034d61058d36600461511b565b611e51565b34801561059e57600080fd5b50610451611f06565b61034d611f2a565b61034d6105bd366004614fe5565b611a36565b3480156105ce57600080fd5b506105e26105dd366004615008565b611f3c565b6040516103749190615b87565b61034d6105fd366004615033565b6120e9565b61034d610610366004615074565b612200565b61034d6106233660046157b5565b612366565b61034d610636366004615008565b6123e2565b34801561064757600080fd5b5061034d6106563660046151b6565b6123f1565b6103c3610669366004615621565b612443565b34801561067a57600080fd5b5061034d61068936600461531e565b6124e3565b61034d61069c366004615008565b612534565b61034d6106af36600461511b565b612540565b600080600083608001511415610771575081516040517f70a0823100000000000000000000000000000000000000000000000000000000815260019173ffffffffffffffffffffffffffffffffffffffff16906370a082319061071b903090600401615a36565b60206040518083038186803b15801561073357600080fd5b505afa158015610747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076b91906157cd565b60808401525b6107ed836080015184606001518560c001516040518060400160405280886000015189604001518a602001516040516020016107af939291906159a4565b6040516020818303038152906040528152602001866107ce57336107d0565b305b73ffffffffffffffffffffffffffffffffffffffff1690526125d8565b91508260a00151821015610836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c77565b60405180910390fd5b50919050565b60006108b0604083018035906108559060208601614fe5565b604080518082019091526000908061086d8880615e3b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525033602090910152612789565b505060005460608201358111156108f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c09565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b600084138061092b5750600083135b61093457600080fd5b600061094282840184615644565b905060008060006109568460000151612970565b9250925092506109887f00000000000000000000000000000000000000000000000000000000000000008484846129a1565b5060008060008a136109c9578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610896109fa565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16108a5b915091508115610a1957610a1485876020015133846129b7565b610a60565b8551610a2490612b95565b15610a49578551610a3490612b9d565b8652610a438133600089612789565b50610a60565b80600081905550610a6084876020015133846129b7565b50505050505050505050565b604080516101608101909152606090610c70907f88316456000000000000000000000000000000000000000000000000000000009080610aaf6020870187614fe5565b73ffffffffffffffffffffffffffffffffffffffff168152602001856020016020810190610add9190614fe5565b73ffffffffffffffffffffffffffffffffffffffff168152602001610b08606087016040880161579b565b62ffffff168152602001610b226080870160608801615373565b60020b8152602001610b3a60a0870160808801615373565b60020b8152602090810190610b5a90610b5590880188614fe5565b612bd2565b8152602001610b75866020016020810190610b559190614fe5565b815260a0860135602082015260c08601356040820152606001610b9f610100870160e08801614fe5565b73ffffffffffffffffffffffffffffffffffffffff1681526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff815250604051602401610bee9190615cf2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611bc4565b90505b919050565b60608380600143034014610ced57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f426c6f636b686173680000000000000000000000000000000000000000000000604482015290519081900360640190fd5b610cf78484611a60565b91505b509392505050565b610d0f8484338585612200565b50505050565b6000610d757f000000000000000000000000000000000000000000000000000000000000000087868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612c7792505050565b600081518110610d8157fe5b6020026020010151905084811115610dc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c09565b610e5e84846000818110610dd557fe5b9050602002016020810190610dea9190614fe5565b33610e587f000000000000000000000000000000000000000000000000000000000000000088886000818110610e1c57fe5b9050602002016020810190610e319190614fe5565b89896001818110610e3e57fe5b9050602002016020810190610e539190614fe5565b612db0565b846129b7565b73ffffffffffffffffffffffffffffffffffffffff821660011415610e8557339150610ea8565b73ffffffffffffffffffffffffffffffffffffffff821660021415610ea8573091505b610ee6848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250869250612e9b915050565b95945050505050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b158015610f8f57600080fd5b505af1158015610a60573d6000803e3d6000fd5b60008086611059575060018484600081610fb957fe5b9050602002016020810190610fce9190614fe5565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110069190615a36565b60206040518083038186803b15801561101e57600080fd5b505afa158015611032573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105691906157cd565b96505b6110e48585600081811061106957fe5b905060200201602081019061107e9190614fe5565b82611089573361108b565b305b6110de7f0000000000000000000000000000000000000000000000000000000000000000898960008181106110bc57fe5b90506020020160208101906110d19190614fe5565b8a8a6001818110610e3e57fe5b8a6129b7565b73ffffffffffffffffffffffffffffffffffffffff83166001141561110b5733925061112e565b73ffffffffffffffffffffffffffffffffffffffff83166002141561112e573092505b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061115e57fe5b90506020020160208101906111739190614fe5565b73ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016111ab9190615a36565b60206040518083038186803b1580156111c357600080fd5b505afa1580156111d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111fb91906157cd565b905061123b868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250889250612e9b915050565b6113108187877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061126d57fe5b90506020020160208101906112829190614fe5565b73ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b81526004016112ba9190615a36565b60206040518083038186803b1580156112d257600080fd5b505afa1580156112e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130a91906157cd565b906131a0565b92508683101561134c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c77565b505095945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000611424608083018035906113949060608601614fe5565b6113a460e0860160c08701614fe5565b60405180604001604052808760200160208101906113c29190614fe5565b6113d260608a0160408b0161579b565b6113df60208b018b614fe5565b6040516020016113f1939291906159a4565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff16815250612789565b90508160a001358111156108f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c09565b61148e817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6131b0565b61149757600080fd5b50565b606083806114a66132fc565b1115610ced57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b61151e8160006131b0565b61146457600080fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600082118015611580575060648211155b61158957600080fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561161257600080fd5b505afa158015611626573d6000803e3d6000fd5b505050506040513d602081101561163c57600080fd5b50519050848110156116af57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e73756666696369656e742053414d42000000000000000000000000000000604482015290519081900360640190fd5b8015611780577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561172857600080fd5b505af115801561173c573d6000803e3d6000fd5b505050506000612710611758858461330090919063ffffffff16565b8161175f57fe5b0490508015611772576117728382613324565b61177e85828403613324565b505b5050505050565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b15801561181c57600080fd5b505afa158015611830573d6000803e3d6000fd5b505050506040513d602081101561184657600080fd5b5051101561177e5761177e868686868686610eef565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156118e557600080fd5b505afa1580156118f9573d6000803e3d6000fd5b505050506040513d602081101561190f57600080fd5b505190508281101561198257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e73756666696369656e742053414d42000000000000000000000000000000604482015290519081900360640190fd5b8015611a1d577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156119fb57600080fd5b505af1158015611a0f573d6000803e3d6000fd5b50505050611a1d8282613324565b505050565b611a2d8160006131b0565b611a3657600080fd5b61148e817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6131b0565b60608167ffffffffffffffff81118015611a7957600080fd5b50604051908082528060200260200182016040528015611aad57816020015b6060815260200190600190039081611a985790505b50905060005b82811015611bb35760008030868685818110611acb57fe5b9050602002810190611add9190615e3b565b604051611aeb929190615a0a565b600060405180830381855af49150503d8060008114611b26576040519150601f19603f3d011682016040523d82523d6000602084013e611b2b565b606091505b509150915081611b9157604481511015611b4457600080fd5b60048101905080806020019051810190611b5e919061542d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d9190615b74565b80848481518110611b9e57fe5b60209081029190910101525050600101611ab3565b5092915050565b611497813361185c565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1683604051611c0d9190615a1a565b6000604051808303816000865af19150503d8060008114611c4a576040519150601f19603f3d011682016040523d82523d6000602084013e611c4f565b606091505b50925090508061083657604482511015611c6857600080fd5b60048201915081806020019051810190611b5e919061542d565b600080600083604001511415611d5357600190506000611ca58460000151612970565b50506040517f70a0823100000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906370a0823190611cfc903090600401615a36565b60206040518083038186803b158015611d1457600080fd5b505afa158015611d28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4c91906157cd565b6040850152505b600081611d605733611d62565b305b90505b6000611d748560000151612b95565b9050611dcd856040015182611d8d578660200151611d8f565b305b60006040518060400160405280611da98b60000151613472565b81526020018773ffffffffffffffffffffffffffffffffffffffff168152506125d8565b60408601528015611ded578451309250611de690612b9d565b8552611dfa565b8460400151935050611e00565b50611d65565b8360600151831015611e3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c77565b5050919050565b611a1d8333848461156f565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015611ec657600080fd5b505afa158015611eda573d6000803e3d6000fd5b505050506040513d6020811015611ef057600080fd5b5051101561177e5761177e868686868686612540565b7f000000000000000000000000000000000000000000000000000000000000000081565b4715611f3a57611f3a3347613324565b565b6000818373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e307f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b8152600401611f9a929190615a57565b60206040518083038186803b158015611fb257600080fd5b505afa158015611fc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fea91906157cd565b10611ff7575060006120e3565b612021837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6131b0565b1561202e575060016120e3565b612058837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6131b0565b15612065575060026120e3565b6120708360006131b0565b61207957600080fd5b6120a3837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6131b0565b156120b0575060036120e3565b6120da837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6131b0565b1561034f575060045b92915050565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561215257600080fd5b505afa158015612166573d6000803e3d6000fd5b505050506040513d602081101561217c57600080fd5b50519050828110156121ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b8015610d0f57610d0f848383613481565b600082118015612211575060648211155b61221a57600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561228357600080fd5b505afa158015612297573d6000803e3d6000fd5b505050506040513d60208110156122ad57600080fd5b505190508481101561232057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b801561177e5760006127106123358386613300565b8161233c57fe5b049050801561235057612350878483613481565b61235d8786838503613481565b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123ce57600080fd5b505af115801561177e573d6000803e3d6000fd5b6123ed8282336120e9565b5050565b6000806123ff868685613656565b915091508362ffffff168183031261177e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c40565b6060610c7063219f5d1760e01b6040518060c001604052808560400135815260200161247b866000016020810190610b559190614fe5565b8152602001612496866020016020810190610b559190614fe5565b815260200185606001358152602001856080013581526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff815250604051602401610bee9190615cae565b6000806124f08584613869565b915091508362ffffff1681830312611780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615c40565b6123ed82333084613af1565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b158015610f8f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff84166001141561260157339350612624565b73ffffffffffffffffffffffffffffffffffffffff841660021415612624573093505b60008060006126368560000151612970565b9194509250905073ffffffffffffffffffffffffffffffffffffffff80831690841610600080612667868686613cce565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b8561268d8f613d0c565b73ffffffffffffffffffffffffffffffffffffffff8e16156126af578d6126d5565b876126ce5773fffd8963efd1fc6a506488495d951d5263988d256126d5565b6401000276a45b8d6040516020016126e69190615da0565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401612715959493929190615a7e565b6040805180830381600087803b15801561272e57600080fd5b505af1158015612742573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612766919061538f565b91509150826127755781612777565b805b6000039b9a5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8416600114156127b2573393506127d5565b73ffffffffffffffffffffffffffffffffffffffff8416600214156127d5573093505b60008060006127e78560000151612970565b9194509250905073ffffffffffffffffffffffffffffffffffffffff80841690831610600080612818858786613cce565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b8561283e8f613d0c565b60000373ffffffffffffffffffffffffffffffffffffffff8e1615612863578d612889565b876128825773fffd8963efd1fc6a506488495d951d5263988d25612889565b6401000276a45b8d60405160200161289a9190615da0565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016128c9959493929190615a7e565b6040805180830381600087803b1580156128e257600080fd5b505af11580156128f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291a919061538f565b9150915060008361292f578183600003612935565b82826000035b909850905073ffffffffffffffffffffffffffffffffffffffff8a16612961578b811461296157600080fd5b50505050505050949350505050565b6000808061297e8482613d3e565b925061298b846014613e3e565b9050612998846017613d3e565b91509193909250565b6000610ee6856129b2868686613f2e565b613fab565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612a125750804710155b15612b5b577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a7f57600080fd5b505af1158015612a93573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b2957600080fd5b505af1158015612b3d573d6000803e3d6000fd5b505050506040513d6020811015612b5357600080fd5b50610d0f9050565b73ffffffffffffffffffffffffffffffffffffffff8316301415612b8957612b84848383613481565b610d0f565b610d0f84848484613af1565b516042111590565b8051606090610c709083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe901613fdb565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190612c27903090600401615a36565b60206040518083038186803b158015612c3f57600080fd5b505afa158015612c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7091906157cd565b6060600282511015612c8857600080fd5b815167ffffffffffffffff81118015612ca057600080fd5b50604051908082528060200260200182016040528015612cca578160200160208202803683370190505b5090508281600183510381518110612cde57fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b8015610cfa57600080612d4b87866001860381518110612d2a57fe5b6020026020010151878681518110612d3e57fe5b60200260200101516141c2565b91509150612d6d848481518110612d5e57fe5b602002602001015183836142aa565b846001850381518110612d7c57fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612d0e565b6000806000612dbf8585614380565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f400e13fc6c59224f20228f0c0561806856ac34b7318f337f8012707c880c351f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b60005b6001835103811015611a1d57600080848381518110612eb957fe5b6020026020010151858460010181518110612ed057fe5b6020026020010151915091506000612ee88383614380565b5090506000612f187f00000000000000000000000000000000000000000000000000000000000000008585612db0565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612f6657600080fd5b505afa158015612f7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9e91906156d4565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691506000808773ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614613000578284613003565b83835b91509150613044828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b81526004016112ba9190615a36565b9550613051868383614425565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461309557826000613099565b6000835b91509150600060028c51038a106130b0578a6130f1565b6130f17f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106130e457fe5b6020026020010151612db0565b604080516000815260208101918290527f022c0d9f0000000000000000000000000000000000000000000000000000000090915290915073ffffffffffffffffffffffffffffffffffffffff87169063022c0d9f906131599086908690869060248101615e00565b600060405180830381600087803b15801561317357600080fd5b505af1158015613187573d6000803e3d6000fd5b50506001909b019a50612e9e9950505050505050505050565b808203828111156120e357600080fd5b60008060008473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360e01b7f000000000000000000000000000000000000000000000000000000000000000086604051602401613207929190615ad0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516132909190615a1a565b6000604051808303816000865af19150503d80600081146132cd576040519150601f19603f3d011682016040523d82523d6000602084013e6132d2565b606091505b5091509150818015610ee6575080511580610ee6575080806020019051810190610ee69190615287565b4290565b600082158061331b5750508181028183828161331857fe5b04145b6120e357600080fd5b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b6020831061339b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161335e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146133fd576040519150601f19603f3d011682016040523d82523d6000602084013e613402565b606091505b5050905080611a1d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6060610c70826000602b613fdb565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b6020831061355657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613519565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146135b8576040519150601f19603f3d011682016040523d82523d6000602084013e6135bd565b606091505b50915091508180156135eb5750805115806135eb57508080602001905160208110156135e857600080fd5b50515b61178057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080835185511461366757600080fd5b6000855167ffffffffffffffff8111801561368157600080fd5b506040519080825280602002602001820160405280156136bb57816020015b6136a8614e2e565b8152602001906001900390816136a05790505b5090506000865167ffffffffffffffff811180156136d857600080fd5b5060405190808252806020026020018201604052801561371257816020015b6136ff614e2e565b8152602001906001900390816136f75790505b50905060005b8751811015613842576000806137418a848151811061373357fe5b602002602001015189613869565b9150915061374e826144fb565b85848151811061375a57fe5b60200260200101516000019060020b908160020b8152505061377b816144fb565b84848151811061378757fe5b60200260200101516000019060020b908160020b815250508883815181106137ab57fe5b60200260200101518584815181106137bf57fe5b6020026020010151602001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff168152505088838151811061380157fe5b602002602001015184848151811061381557fe5b6020908102919091018101516fffffffffffffffffffffffffffffffff9092169101525050600101613718565b5061384c8261450c565b60020b935061385a8161450c565b60020b92505050935093915050565b600080600080613878866145f4565b90506000805b82811015613a965760008060006138948b612970565b92509250925060006138a7848484613cce565b905060008063ffffffff8d166138d0576138c08361461f565b600291820b9350900b9050613972565b6138da838e6148b7565b8160020b915050809250508273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561392b57600080fd5b505afa15801561393f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613963919061570f565b50505060029290920b93505050505b600189038714156139b3578473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161099506139c2565b6139bc8e612b9d565b9d508597505b6000871580613a6357508673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1610613a33578673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610613a63565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16105b90508015613a78579b82019b9a81019a613a83565b828d039c50818c039b505b50506001909501945061387e9350505050565b5082613ae7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850294507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff840293505b5050509250929050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b60208310613bce57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613b91565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c30576040519150601f19603f3d011682016040523d82523d6000602084013e613c35565b606091505b5091509150818015613c63575080511580613c635750808060200190516020811015613c6057600080fd5b50515b61177e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000613d047f0000000000000000000000000000000000000000000000000000000000000000613cff868686613f2e565b614ce8565b949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008210613d3a57600080fd5b5090565b600081826014011015613db257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b8160140183511015613e2557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b600081826003011015613eb257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b8160030183511015613f2557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b613f36614e45565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115613f6e579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000613fb78383614ce8565b90503373ffffffffffffffffffffffffffffffffffffffff8216146120e357600080fd5b60608182601f01101561404f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b8282840110156140c057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b8183018451101561413257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b60608215801561415157604051915060008252602082016040526141b9565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561418a578051835260209283019201614172565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60008060006141d18585614380565b5090506000806141e2888888612db0565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561422757600080fd5b505afa15801561423b573d6000803e3d6000fd5b505050506040513d606081101561425157600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff8781169084161461429857808261429b565b81815b90999098509650505050505050565b600080841161431a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f494e53554646494349454e545f4f55545055545f414d4f554e54000000000000604482015290519081900360640190fd5b60008311801561432a5750600082115b61433357600080fd5b600061434b6103e86143458688613300565b90613300565b9050600061435f6103e561434586896131a0565b9050614376600182848161436f57fe5b0490614e1e565b9695505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156143bc57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106143f65782846143f9565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff821661441e57600080fd5b9250929050565b600080841161449557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f494e53554646494349454e545f494e5055545f414d4f554e5400000000000000604482015290519081900360640190fd5b6000831180156144a55750600082115b6144ae57600080fd5b60006144bc856103e5613300565b905060006144ca8285613300565b905060006144e4836144de886103e8613300565b90614e1e565b90508082816144ef57fe5b04979650505050505050565b80600281900b8114610c7357600080fd5b6000806000805b84518110156145a15784818151811061452857fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff1685828151811061455257fe5b60200260200101516000015160020b028301925084818151811061457257fe5b6020026020010151602001516fffffffffffffffffffffffffffffffff16820191508080600101915050614513565b508082816145ab57fe5b0592506000821280156145c657508082816145c257fe5b0715155b15611e3e5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01919050565b5160177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec9091010490565b6000806000808473ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561466b57600080fd5b505afa15801561467f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146a3919061570f565b50939750919550935050600161ffff84161191506146ef9050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615bd2565b6000808673ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b815260040161472b9190615de8565b60806040518083038186803b15801561474357600080fd5b505afa158015614757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061477b91906158da565b5050915091506147896132fc565b63ffffffff168263ffffffff16146147a3578495506148ae565b60008361ffff1660018561ffff168761ffff160103816147bf57fe5b06905060008060008a73ffffffffffffffffffffffffffffffffffffffff1663252c09d7856040518263ffffffff1660e01b81526004016148009190615df7565b60806040518083038186803b15801561481857600080fd5b505afa15801561482c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061485091906158da565b935050925092508061488e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d90615b9b565b82860363ffffffff811683870360060b816148a557fe5b059a5050505050505b50505050915091565b60008063ffffffff831661492c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f4250000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516002808252606082018352600092602083019080368337019050509050838160008151811061495b57fe5b602002602001019063ffffffff16908163ffffffff168152505060008160018151811061498457fe5b63ffffffff9092166020928302919091018201526040517f883bdbfd00000000000000000000000000000000000000000000000000000000815260048101828152835160248301528351600093849373ffffffffffffffffffffffffffffffffffffffff8b169363883bdbfd9388939192839260449091019185820191028083838b5b83811015614a1f578181015183820152602001614a07565b505050509050019250505060006040518083038186803b158015614a4257600080fd5b505afa158015614a56573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040908152811015614a9d57600080fd5b8101908080516040519392919084640100000000821115614abd57600080fd5b908301906020820185811115614ad257600080fd5b8251866020820283011164010000000082111715614aef57600080fd5b82525081516020918201928201910280838360005b83811015614b1c578181015183820152602001614b04565b5050505090500160405260200180516040519392919084640100000000821115614b4557600080fd5b908301906020820185811115614b5a57600080fd5b8251866020820283011164010000000082111715614b7757600080fd5b82525081516020918201928201910280838360005b83811015614ba4578181015183820152602001614b8c565b5050505090500160405250505091509150600082600081518110614bc457fe5b602002602001015183600181518110614bd957fe5b6020026020010151039050600082600081518110614bf357fe5b602002602001015183600181518110614c0857fe5b60200260200101510390508763ffffffff168260060b81614c2557fe5b05965060008260060b128015614c4f57508763ffffffff168260060b81614c4857fe5b0760060b15155b15614c7a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909601955b63ffffffff881673ffffffffffffffffffffffffffffffffffffffff0277ffffffffffffffffffffffffffffffffffffffff00000000602083901b1677ffffffffffffffffffffffffffffffffffffffffffffffff821681614cd857fe5b0496505050505050509250929050565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610614d2a57600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527f203c8ec649b23b7faf9b73ccadfb1a67af52a097119c82801f4947ec5deb6c0460d5808301919091528251808303909101815260f5909101909152805191012090565b808201828110156120e357600080fd5b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b8035610c7381615f4c565b60008083601f840112614e81578182fd5b50813567ffffffffffffffff811115614e98578182fd5b602083019150836020808302850101111561441e57600080fd5b600082601f830112614ec2578081fd5b81356020614ed7614ed283615ec2565b615e9e565b8281528181019085830183850287018401881015614ef3578586fd5b855b85811015614f2e5781356fffffffffffffffffffffffffffffffff81168114614f1c578788fd5b84529284019290840190600101614ef5565b5090979650505050505050565b80518015158114610c7357600080fd5b600082601f830112614f5b578081fd5b8135614f69614ed282615ee0565b818152846020838601011115614f7d578283fd5b816020850160208301379081016020019190915292915050565b80516dffffffffffffffffffffffffffff81168114610c7357600080fd5b805161ffff81168114610c7357600080fd5b803562ffffff81168114610c7357600080fd5b8035610c7381615f7d565b600060208284031215614ff6578081fd5b813561500181615f4c565b9392505050565b6000806040838503121561501a578081fd5b823561502581615f4c565b946020939093013593505050565b600080600060608486031215615047578081fd5b833561505281615f4c565b925060208401359150604084013561506981615f4c565b809150509250925092565b600080600080600060a0868803121561508b578283fd5b853561509681615f4c565b94506020860135935060408601356150ad81615f4c565b92506060860135915060808601356150c481615f4c565b809150509295509295909350565b600080600080608085870312156150e7578182fd5b84356150f281615f4c565b93506020850135925060408501359150606085013561511081615f4c565b939692955090935050565b60008060008060008060c08789031215615133578384fd5b863561513e81615f4c565b95506020870135945060408701359350606087013561515c81615f8f565b9598949750929560808101359460a0909101359350915050565b60008060208385031215615188578182fd5b823567ffffffffffffffff81111561519e578283fd5b6151aa85828601614e70565b90969095509350505050565b600080600080608085870312156151cb578182fd5b843567ffffffffffffffff808211156151e2578384fd5b818701915087601f8301126151f5578384fd5b81356020615205614ed283615ec2565b82815281810190858301885b8581101561523a576152288e8684358b0101614f4b565b84529284019290840190600101615211565b50909950505088013592505080821115615252578384fd5b5061525f87828801614eb2565b93505061526e60408601614fc7565b915061527c60608601614fda565b905092959194509250565b600060208284031215615298578081fd5b61500182614f3b565b6000806000604084860312156152b5578081fd5b83359250602084013567ffffffffffffffff8111156152d2578182fd5b6152de86828701614e70565b9497909650939450505050565b6000602082840312156152fc578081fd5b813567ffffffffffffffff811115615312578182fd5b613d0484828501614f4b565b600080600060608486031215615332578081fd5b833567ffffffffffffffff811115615348578182fd5b61535486828701614f4b565b93505061536360208501614fc7565b9150604084013561506981615f7d565b600060208284031215615384578081fd5b813561500181615f6e565b600080604083850312156153a1578182fd5b505080516020909101519092909150565b600080600080606085870312156153c7578182fd5b8435935060208501359250604085013567ffffffffffffffff808211156153ec578384fd5b818701915087601f8301126153ff578384fd5b81358181111561540d578485fd5b88602082850101111561541e578485fd5b95989497505060200194505050565b60006020828403121561543e578081fd5b815167ffffffffffffffff811115615454578182fd5b8201601f81018413615464578182fd5b8051615472614ed282615ee0565b818152856020838501011115615486578384fd5b610ee6826020830160208601615f20565b6000602082840312156154a8578081fd5b813567ffffffffffffffff808211156154bf578283fd5b90830190608082860312156154d2578283fd5b6040516080810181811083821117156154e757fe5b6040528235828111156154f8578485fd5b61550487828601614f4b565b8252506020830135915061551782615f4c565b816020820152604083013560408201526060830135606082015280935050505092915050565b600060e0828403121561554e578081fd5b60405160e0810181811067ffffffffffffffff8211171561556b57fe5b60405261557783614e65565b815261558560208401614e65565b602082015261559660408401614fc7565b60408201526155a760608401614e65565b60608201526080830135608082015260a083013560a08201526155cc60c08401614e65565b60c08201529392505050565b6000602082840312156155e9578081fd5b813567ffffffffffffffff8111156155ff578182fd5b820160808185031215615001578182fd5b600060e08284031215610836578081fd5b600060a08284031215610836578081fd5b60006101008284031215610836578081fd5b600060208284031215615655578081fd5b813567ffffffffffffffff8082111561566c578283fd5b908301906040828603121561567f578283fd5b60405160408101818110838211171561569457fe5b6040528235828111156156a5578485fd5b6156b187828601614f4b565b825250602083013592506156c483615f4c565b6020810192909252509392505050565b6000806000606084860312156156e8578081fd5b6156f184614f97565b92506156ff60208501614f97565b9150604084015161506981615f7d565b600080600080600080600060e0888a031215615729578485fd5b875161573481615f4c565b602089015190975061574581615f6e565b955061575360408901614fb5565b945061576160608901614fb5565b935061576f60808901614fb5565b925060a088015161577f81615f8f565b915061578d60c08901614f3b565b905092959891949750929550565b6000602082840312156157ac578081fd5b61500182614fc7565b6000602082840312156157c6578081fd5b5035919050565b6000602082840312156157de578081fd5b5051919050565b600080604083850312156157f7578182fd5b82359150602083013561580981615f4c565b809150509250929050565b60008060008060808587031215615829578182fd5b84359350602085013561583b81615f4c565b925060408501359150606085013561511081615f4c565b600080600060608486031215615866578081fd5b8335925060208401359150604084013561506981615f4c565b600080600080600060808688031215615896578283fd5b8535945060208601359350604086013567ffffffffffffffff8111156158ba578384fd5b6158c688828901614e70565b90945092505060608601356150c481615f4c565b600080600080608085870312156158ef578182fd5b84516158fa81615f7d565b8094505060208501518060060b8114615911578283fd5b604086015190935061592281615f4c565b915061527c60608601614f3b565b73ffffffffffffffffffffffffffffffffffffffff169052565b60008151808452615962816020860160208601615f20565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60020b9052565b62ffffff169052565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b6000828483379101908152919050565b60008251615a2c818460208701615f20565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152615ac560a083018461594a565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015615b67577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452615b5585835161594a565b94509285019290850190600101615b1b565b5092979650505050505050565b600060208252615001602083018461594a565b6020810160058310615b9557fe5b91905290565b60208082526003908201527f4f4e490000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526003908201527f4e454f0000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526012908201527f546f6f206d756368207265717565737465640000000000000000000000000000604082015260600190565b60208082526002908201527f5444000000000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526013908201527f546f6f206c6974746c6520726563656976656400000000000000000000000000604082015260600190565b600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b600061016082019050615d06828451615930565b6020830151615d186020840182615930565b506040830151615d2b604084018261599b565b506060830151615d3e6060840182615994565b506080830151615d516080840182615994565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151615d8f82850182615930565b505061014092830151919092015290565b600060208252825160406020840152615dbc606084018261594a565b905073ffffffffffffffffffffffffffffffffffffffff60208501511660408401528091505092915050565b61ffff91909116815260200190565b90815260200190565b600085825284602083015273ffffffffffffffffffffffffffffffffffffffff8416604083015260806060830152614376608083018461594a565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615e6f578283fd5b83018035915067ffffffffffffffff821115615e89578283fd5b60200191503681900382131561441e57600080fd5b60405181810167ffffffffffffffff81118282101715615eba57fe5b604052919050565b600067ffffffffffffffff821115615ed657fe5b5060209081020190565b600067ffffffffffffffff821115615ef457fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015615f3b578181015183820152602001615f23565b83811115610d0f5750506000910152565b73ffffffffffffffffffffffffffffffffffffffff8116811461149757600080fd5b8060020b811461149757600080fd5b63ffffffff8116811461149757600080fd5b60ff8116811461149757600080fdfea164736f6c6343000706000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
