{
  "schemaVersion": 1,
  "chainId": 56,
  "compiler": "solc 0.8.24+commit.e11b9ed9",
  "sourceHash": "sha256:af990318892ba1540b177c0484fd5a8ea6e2deff7ced2c35c41a429942249e01",
  "deploymentReady": false,
  "auditStatus": "not-audited",
  "warning": "Compiled reference artifacts. Deployment stays disabled until an independent audit is complete and the manifest is explicitly armed via STANK_MANIFEST_DEPLOYMENT_READY / STANK_MANIFEST_AUDIT_STATUS.",
  "contracts": [
    {
      "key": "pairRegistry",
      "name": "PairAssetRegistry",
      "source": "/contracts/PairAssetRegistry.sol",
      "abi": [
        {
          "type": "constructor",
          "inputs": [
            {
              "name": "initialOwner",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "acceptOwnership",
          "inputs": [],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "addPairAsset",
          "inputs": [
            {
              "name": "asset",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "assetClass",
              "type": "uint8",
              "internalType": "enum PairAssetRegistry.AssetClass"
            },
            {
              "name": "label",
              "type": "string",
              "internalType": "string"
            },
            {
              "name": "symbol",
              "type": "string",
              "internalType": "string"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "addPairAssets",
          "inputs": [
            {
              "name": "inputs",
              "type": "tuple[]",
              "internalType": "struct PairAssetRegistry.PairAssetInput[]",
              "components": [
                {
                  "name": "asset",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "assetClass",
                  "type": "uint8",
                  "internalType": "enum PairAssetRegistry.AssetClass"
                },
                {
                  "name": "label",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "symbol",
                  "type": "string",
                  "internalType": "string"
                }
              ]
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "isPairAssetActive",
          "inputs": [
            {
              "name": "asset",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "owner",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "pairAsset",
          "inputs": [
            {
              "name": "asset",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "tuple",
              "internalType": "struct PairAssetRegistry.PairAsset",
              "components": [
                {
                  "name": "listed",
                  "type": "bool",
                  "internalType": "bool"
                },
                {
                  "name": "active",
                  "type": "bool",
                  "internalType": "bool"
                },
                {
                  "name": "assetClass",
                  "type": "uint8",
                  "internalType": "enum PairAssetRegistry.AssetClass"
                },
                {
                  "name": "label",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "symbol",
                  "type": "string",
                  "internalType": "string"
                }
              ]
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "pairAssetAt",
          "inputs": [
            {
              "name": "index",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "pairAssetCount",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "pendingOwner",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "setPairAssetActive",
          "inputs": [
            {
              "name": "asset",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "active",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "transferOwnership",
          "inputs": [
            {
              "name": "newOwner",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "updatePairAssetMetadata",
          "inputs": [
            {
              "name": "asset",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "assetClass",
              "type": "uint8",
              "internalType": "enum PairAssetRegistry.AssetClass"
            },
            {
              "name": "label",
              "type": "string",
              "internalType": "string"
            },
            {
              "name": "symbol",
              "type": "string",
              "internalType": "string"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "event",
          "name": "OwnershipTransferStarted",
          "inputs": [
            {
              "name": "currentOwner",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "pendingOwner",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "OwnershipTransferred",
          "inputs": [
            {
              "name": "previousOwner",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "newOwner",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "PairAssetAdded",
          "inputs": [
            {
              "name": "asset",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "assetClass",
              "type": "uint8",
              "indexed": true,
              "internalType": "enum PairAssetRegistry.AssetClass"
            },
            {
              "name": "label",
              "type": "string",
              "indexed": false,
              "internalType": "string"
            },
            {
              "name": "symbol",
              "type": "string",
              "indexed": false,
              "internalType": "string"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "PairAssetMetadataChanged",
          "inputs": [
            {
              "name": "asset",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "assetClass",
              "type": "uint8",
              "indexed": true,
              "internalType": "enum PairAssetRegistry.AssetClass"
            },
            {
              "name": "label",
              "type": "string",
              "indexed": false,
              "internalType": "string"
            },
            {
              "name": "symbol",
              "type": "string",
              "indexed": false,
              "internalType": "string"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "PairAssetStatusChanged",
          "inputs": [
            {
              "name": "asset",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "active",
              "type": "bool",
              "indexed": false,
              "internalType": "bool"
            }
          ],
          "anonymous": false
        },
        {
          "type": "error",
          "name": "AssetAlreadyListed",
          "inputs": [
            {
              "name": "asset",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "AssetNotListed",
          "inputs": [
            {
              "name": "asset",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "InvalidAsset",
          "inputs": [
            {
              "name": "asset",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "NotOwner",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NotPendingOwner",
          "inputs": []
        },
        {
          "type": "error",
          "name": "ZeroAddress",
          "inputs": []
        }
      ],
      "bytecode": "0x608060405234801561000f575f80fd5b5060405161110c38038061110c83398101604081905261002e916100a4565b806001600160a01b0381166100565760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b03831690811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350506100d1565b5f602082840312156100b4575f80fd5b81516001600160a01b03811681146100ca575f80fd5b9392505050565b61102e806100de5f395ff3fe608060405234801561000f575f80fd5b50600436106100b1575f3560e01c80637caeeeed1161006e5780637caeeeed1461014c5780638da5cb5b1461018c578063ac8bb6451461019e578063de877d08146101af578063e30c3978146101c2578063f2fde38b146101d5575f80fd5b8063129cf509146100b5578063485a74fe146100de578063606c96b7146100f35780636385d44e1461011e57806379ba5097146101315780637acf358014610139575b5f80fd5b6100c86100c3366004610a6e565b6101e8565b6040516100d59190610ae5565b60405180910390f35b6100f16100ec366004610b66565b6103ab565b005b610106610101366004610bd5565b610455565b6040516001600160a01b0390911681526020016100d5565b6100f161012c366004610c3f565b610483565b6100f161059f565b6100f1610147366004610c3f565b610620565b61017c61015a366004610a6e565b6001600160a01b03165f90815260026020526040902054610100900460ff1690565b60405190151581526020016100d5565b5f54610106906001600160a01b031681565b6003546040519081526020016100d5565b6100f16101bd366004610cca565b610660565b600154610106906001600160a01b031681565b6100f16101e3366004610a6e565b610741565b6040805160a0810182525f8082526020820181905291810191909152606080820181905260808201526001600160a01b0382165f90815260026020818152604092839020835160a081018552815460ff8082161515835261010082048116151594830194909452909491939185019262010000909104169081111561026f5761026f610a8e565b600281111561028057610280610a8e565b815260200160018201805461029490610d03565b80601f01602080910402602001604051908101604052809291908181526020018280546102c090610d03565b801561030b5780601f106102e25761010080835404028352916020019161030b565b820191905f5260205f20905b8154815290600101906020018083116102ee57829003601f168201915b5050505050815260200160028201805461032490610d03565b80601f016020809104026020016040519081016040528092919081815260200182805461035090610d03565b801561039b5780601f106103725761010080835404028352916020019161039b565b820191905f5260205f20905b81548152906001019060200180831161037e57829003601f168201915b5050505050815250509050919050565b5f546001600160a01b031633146103d5576040516330cd747160e01b815260040160405180910390fd5b805f5b8181101561044f57368484838181106103f3576103f3610d3b565b90506020028101906104059190610d4f565b90506104466104176020830183610a6e565b6104276040840160208501610d6d565b6104346040850185610d86565b6104416060870187610d86565b6107e2565b506001016103d8565b50505050565b5f6003828154811061046957610469610d3b565b5f918252602090912001546001600160a01b031692915050565b5f546001600160a01b031633146104ad576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b0386165f908152600260205260409020805460ff166104f65760405163d0957f1f60e01b81526001600160a01b03881660048201526024015b60405180910390fd5b80548690829062ff000019166201000083600281111561051857610518610a8e565b02179055506001810161052c858783610e29565b506002810161053c838583610e29565b5085600281111561054f5761054f610a8e565b876001600160a01b03167f3c6dcc6f85d52d33f9f03a2e3f69324400ab1a3a50f57e6903911e92da8927ae8787878760405161058e9493929190610f0b565b60405180910390a350505050505050565b6001546001600160a01b031633146105ca57604051630614e5c760e21b815260040160405180910390fd5b5f8054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b5f546001600160a01b0316331461064a576040516330cd747160e01b815260040160405180910390fd5b6106588686868686866107e2565b505050505050565b5f546001600160a01b0316331461068a576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b0382165f908152600260205260409020805460ff166106ce5760405163d0957f1f60e01b81526001600160a01b03841660048201526024016104ed565b805482151561010090910460ff161515036106e857505050565b805461ff0019166101008315159081029190911782556040519081526001600160a01b038416907f74acb5ced56b0628f06c473fad70b8b524ff249f98e06b50398c3bce5f1aee3a9060200160405180910390a2505050565b5f546001600160a01b0316331461076b576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b0381166107925760405163d92e233d60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227009190a350565b6001600160a01b038616158061080057506001600160a01b0386163b155b15610829576040516337bce3c560e11b81526001600160a01b03871660048201526024016104ed565b6001600160a01b0386165f9081526002602052604090205460ff161561086d576040516399dd81ed60e01b81526001600160a01b03871660048201526024016104ed565b6040805160a0810182526001808252602082015290810186600281111561089657610896610a8e565b815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250604080516020601f8601819004810282018101909252848152918101919085908590819084018382808284375f9201829052509390945250506001600160a01b038916815260026020818152604092839020855181549287015161ffff1990931690151561ff0019161761010092151592909202919091178082559285015190935091839162ff000019909116906201000090849081111561097757610977610a8e565b0217905550606082015160018201906109909082610f3c565b50608082015160028201906109a59082610f3c565b5050600380546001810182555f919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b03891617905550846002811115610a0457610a04610a8e565b866001600160a01b03167fbce8933711a2a3029bd169993ecef89796b657a546b6827d4b241eba95d8149f86868686604051610a439493929190610f0b565b60405180910390a3505050505050565b80356001600160a01b0381168114610a69575f80fd5b919050565b5f60208284031215610a7e575f80fd5b610a8782610a53565b9392505050565b634e487b7160e01b5f52602160045260245ffd5b5f81518084525f5b81811015610ac657602081850181015186830182015201610aaa565b505f602082860101526020601f19601f83011685010191505092915050565b602081528151151560208201526020820151151560408201525f604083015160038110610b2057634e487b7160e01b5f52602160045260245ffd5b80606084015250606083015160a06080840152610b4060c0840182610aa2565b90506080840151601f198483030160a0850152610b5d8282610aa2565b95945050505050565b5f8060208385031215610b77575f80fd5b823567ffffffffffffffff80821115610b8e575f80fd5b818501915085601f830112610ba1575f80fd5b813581811115610baf575f80fd5b8660208260051b8501011115610bc3575f80fd5b60209290920196919550909350505050565b5f60208284031215610be5575f80fd5b5035919050565b803560038110610a69575f80fd5b5f8083601f840112610c0a575f80fd5b50813567ffffffffffffffff811115610c21575f80fd5b602083019150836020828501011115610c38575f80fd5b9250929050565b5f805f805f8060808789031215610c54575f80fd5b610c5d87610a53565b9550610c6b60208801610bec565b9450604087013567ffffffffffffffff80821115610c87575f80fd5b610c938a838b01610bfa565b90965094506060890135915080821115610cab575f80fd5b50610cb889828a01610bfa565b979a9699509497509295939492505050565b5f8060408385031215610cdb575f80fd5b610ce483610a53565b915060208301358015158114610cf8575f80fd5b809150509250929050565b600181811c90821680610d1757607f821691505b602082108103610d3557634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112610d63575f80fd5b9190910192915050565b5f60208284031215610d7d575f80fd5b610a8782610bec565b5f808335601e19843603018112610d9b575f80fd5b83018035915067ffffffffffffffff821115610db5575f80fd5b602001915036819003821315610c38575f80fd5b634e487b7160e01b5f52604160045260245ffd5b601f821115610e2457805f5260205f20601f840160051c81016020851015610e025750805b601f840160051c820191505b81811015610e21575f8155600101610e0e565b50505b505050565b67ffffffffffffffff831115610e4157610e41610dc9565b610e5583610e4f8354610d03565b83610ddd565b5f601f841160018114610e86575f8515610e6f5750838201355b5f19600387901b1c1916600186901b178355610e21565b5f83815260208120601f198716915b82811015610eb55786850135825560209485019460019092019101610e95565b5086821015610ed1575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f610f1e604083018688610ee3565b8281036020840152610f31818587610ee3565b979650505050505050565b815167ffffffffffffffff811115610f5657610f56610dc9565b610f6a81610f648454610d03565b84610ddd565b602080601f831160018114610f9d575f8415610f865750858301515b5f19600386901b1c1916600185901b178555610658565b5f85815260208120601f198616915b82811015610fcb57888601518255948401946001909101908401610fac565b5085821015610fe857878501515f19600388901b60f8161c191681555b5050505050600190811b0190555056fea26469706673582212202ae6bb1f667371d8c167ff7198a753e40438853c70e3bc9c78306a21d51aa5fb64736f6c63430008180033",
      "constructorArgs": [
        "$owner"
      ]
    },
    {
      "key": "launchFactory",
      "name": "StankLaunchFactory",
      "source": "/contracts/StankLaunchFactory.sol",
      "abi": [
        {
          "type": "constructor",
          "inputs": [
            {
              "name": "initialOwner",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "pairRegistry_",
              "type": "address",
              "internalType": "contract IPairAssetRegistry"
            },
            {
              "name": "positionManager_",
              "type": "address",
              "internalType": "contract IStankV3PositionManager"
            },
            {
              "name": "swapRouter_",
              "type": "address",
              "internalType": "contract IStankV3SwapRouter"
            },
            {
              "name": "protocolTreasury_",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "CREATOR_AND_HOLDERS_BPS",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint16",
              "internalType": "uint16"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "MAX_NAME_BYTES",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "MAX_SYMBOL_BYTES",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "MAX_TOTAL_SUPPLY",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "POOL_FEE",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint24",
              "internalType": "uint24"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "acceptOwnership",
          "inputs": [],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "componentDeployer",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "contract StankComponentDeployer"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "computeLaunchSalt",
          "inputs": [
            {
              "name": "creator",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "nonce",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "userSalt",
              "type": "bytes32",
              "internalType": "bytes32"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "bytes32",
              "internalType": "bytes32"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "getLaunch",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "tuple",
              "internalType": "struct StankLaunchFactory.Launch",
              "components": [
                {
                  "name": "token",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "pairedAsset",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "creator",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "rewardRecipient",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "pool",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "permanentLocker",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "rewardVault",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "holderRewardsDistributor",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "positionId",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "totalSupply",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "launchTokenLiquidityAmount",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "permanentlyLockedDust",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "tickLower",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "tickUpper",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "creatorRewardBps",
                  "type": "uint16",
                  "internalType": "uint16"
                },
                {
                  "name": "holderRewardBps",
                  "type": "uint16",
                  "internalType": "uint16"
                },
                {
                  "name": "launchedAt",
                  "type": "uint64",
                  "internalType": "uint64"
                }
              ]
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "launch",
          "inputs": [
            {
              "name": "params",
              "type": "tuple",
              "internalType": "struct StankLaunchFactory.LaunchParams",
              "components": [
                {
                  "name": "name",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "symbol",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "totalSupply",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "pairedAsset",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "initialMarketCapPaired",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "creatorRewardBps",
                  "type": "uint16",
                  "internalType": "uint16"
                },
                {
                  "name": "holderRewardBps",
                  "type": "uint16",
                  "internalType": "uint16"
                },
                {
                  "name": "rewardRecipient",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "initialBuyAmount",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "buyRecipient",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "metadataURI",
                  "type": "string",
                  "internalType": "string"
                },
                {
                  "name": "userSalt",
                  "type": "bytes32",
                  "internalType": "bytes32"
                }
              ]
            }
          ],
          "outputs": [
            {
              "name": "created",
              "type": "tuple",
              "internalType": "struct StankLaunchFactory.Launch",
              "components": [
                {
                  "name": "token",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "pairedAsset",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "creator",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "rewardRecipient",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "pool",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "permanentLocker",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "rewardVault",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "holderRewardsDistributor",
                  "type": "address",
                  "internalType": "address"
                },
                {
                  "name": "positionId",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "totalSupply",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "launchTokenLiquidityAmount",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "permanentlyLockedDust",
                  "type": "uint256",
                  "internalType": "uint256"
                },
                {
                  "name": "tickLower",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "tickUpper",
                  "type": "int24",
                  "internalType": "int24"
                },
                {
                  "name": "creatorRewardBps",
                  "type": "uint16",
                  "internalType": "uint16"
                },
                {
                  "name": "holderRewardBps",
                  "type": "uint16",
                  "internalType": "uint16"
                },
                {
                  "name": "launchedAt",
                  "type": "uint64",
                  "internalType": "uint64"
                }
              ]
            }
          ],
          "stateMutability": "payable"
        },
        {
          "type": "function",
          "name": "launchCount",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "launchNonce",
          "inputs": [
            {
              "name": "creator",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [
            {
              "name": "nextNonce",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "launchRange",
          "inputs": [
            {
              "name": "launchIsToken0",
              "type": "bool",
              "internalType": "bool"
            },
            {
              "name": "totalSupply",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "initialMarketCapPaired",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [
            {
              "name": "tickLower",
              "type": "int24",
              "internalType": "int24"
            },
            {
              "name": "tickUpper",
              "type": "int24",
              "internalType": "int24"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "launchedTokenAt",
          "inputs": [
            {
              "name": "index",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "launchesPaused",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "owner",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "pairRegistry",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "contract IPairAssetRegistry"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "pendingOwner",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "positionManager",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "contract IStankV3PositionManager"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "predictNextTokenAddress",
          "inputs": [
            {
              "name": "creator",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "userSalt",
              "type": "bytes32",
              "internalType": "bytes32"
            },
            {
              "name": "name",
              "type": "string",
              "internalType": "string"
            },
            {
              "name": "symbol",
              "type": "string",
              "internalType": "string"
            },
            {
              "name": "totalSupply",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "predictTokenAddress",
          "inputs": [
            {
              "name": "creator",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "nonce",
              "type": "uint256",
              "internalType": "uint256"
            },
            {
              "name": "userSalt",
              "type": "bytes32",
              "internalType": "bytes32"
            },
            {
              "name": "name",
              "type": "string",
              "internalType": "string"
            },
            {
              "name": "symbol",
              "type": "string",
              "internalType": "string"
            },
            {
              "name": "totalSupply",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [
            {
              "name": "predicted",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "protocolTreasury",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "setLaunchesPaused",
          "inputs": [
            {
              "name": "paused",
              "type": "bool",
              "internalType": "bool"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "setProtocolTreasury",
          "inputs": [
            {
              "name": "newTreasury",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "swapRouter",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "contract IStankV3SwapRouter"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "tickSpacing",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "int24",
              "internalType": "int24"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "tokenInitCodeHash",
          "inputs": [
            {
              "name": "name",
              "type": "string",
              "internalType": "string"
            },
            {
              "name": "symbol",
              "type": "string",
              "internalType": "string"
            },
            {
              "name": "totalSupply",
              "type": "uint256",
              "internalType": "uint256"
            }
          ],
          "outputs": [
            {
              "name": "",
              "type": "bytes32",
              "internalType": "bytes32"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "transferOwnership",
          "inputs": [
            {
              "name": "newOwner",
              "type": "address",
              "internalType": "address"
            }
          ],
          "outputs": [],
          "stateMutability": "nonpayable"
        },
        {
          "type": "function",
          "name": "v3Factory",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "contract IStankV3Factory"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "function",
          "name": "wnative",
          "inputs": [],
          "outputs": [
            {
              "name": "",
              "type": "address",
              "internalType": "address"
            }
          ],
          "stateMutability": "view"
        },
        {
          "type": "event",
          "name": "InitialBuyExecuted",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "buyRecipient",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "pairedAssetSpent",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "tokensReceived",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "LaunchCreated",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "creator",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "pairedAsset",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "rewardRecipient",
              "type": "address",
              "indexed": false,
              "internalType": "address"
            },
            {
              "name": "pool",
              "type": "address",
              "indexed": false,
              "internalType": "address"
            },
            {
              "name": "permanentLocker",
              "type": "address",
              "indexed": false,
              "internalType": "address"
            },
            {
              "name": "rewardVault",
              "type": "address",
              "indexed": false,
              "internalType": "address"
            },
            {
              "name": "holderRewardsDistributor",
              "type": "address",
              "indexed": false,
              "internalType": "address"
            },
            {
              "name": "positionId",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "LaunchEconomicsConfigured",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "totalSupply",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "launchTokenLiquidityAmount",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "permanentlyLockedDust",
              "type": "uint256",
              "indexed": false,
              "internalType": "uint256"
            },
            {
              "name": "tickLower",
              "type": "int24",
              "indexed": false,
              "internalType": "int24"
            },
            {
              "name": "tickUpper",
              "type": "int24",
              "indexed": false,
              "internalType": "int24"
            },
            {
              "name": "creatorRewardBps",
              "type": "uint16",
              "indexed": false,
              "internalType": "uint16"
            },
            {
              "name": "holderRewardBps",
              "type": "uint16",
              "indexed": false,
              "internalType": "uint16"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "LaunchPauseChanged",
          "inputs": [
            {
              "name": "paused",
              "type": "bool",
              "indexed": false,
              "internalType": "bool"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "OwnershipTransferStarted",
          "inputs": [
            {
              "name": "currentOwner",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "pendingOwner",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "OwnershipTransferred",
          "inputs": [
            {
              "name": "previousOwner",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "newOwner",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "event",
          "name": "ProtocolTreasuryChanged",
          "inputs": [
            {
              "name": "previousTreasury",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            },
            {
              "name": "newTreasury",
              "type": "address",
              "indexed": true,
              "internalType": "address"
            }
          ],
          "anonymous": false
        },
        {
          "type": "error",
          "name": "DegenerateRange",
          "inputs": []
        },
        {
          "type": "error",
          "name": "ERC20ApproveFailed",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "ERC20TransferFailed",
          "inputs": [
            {
              "name": "token",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "FeeTierNotEnabled",
          "inputs": [
            {
              "name": "fee",
              "type": "uint24",
              "internalType": "uint24"
            }
          ]
        },
        {
          "type": "error",
          "name": "InvalidConfiguration",
          "inputs": []
        },
        {
          "type": "error",
          "name": "InvalidInitialPoolPrice",
          "inputs": [
            {
              "name": "pool",
              "type": "address",
              "internalType": "address"
            },
            {
              "name": "expected",
              "type": "uint160",
              "internalType": "uint160"
            },
            {
              "name": "actual",
              "type": "uint160",
              "internalType": "uint160"
            }
          ]
        },
        {
          "type": "error",
          "name": "InvalidInitialPoolState",
          "inputs": [
            {
              "name": "pool",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "InvalidMarketCap",
          "inputs": []
        },
        {
          "type": "error",
          "name": "InvalidMarketCap",
          "inputs": []
        },
        {
          "type": "error",
          "name": "InvalidMetadata",
          "inputs": []
        },
        {
          "type": "error",
          "name": "InvalidOneSidedMint",
          "inputs": []
        },
        {
          "type": "error",
          "name": "InvalidRewardSplit",
          "inputs": []
        },
        {
          "type": "error",
          "name": "InvalidSupply",
          "inputs": []
        },
        {
          "type": "error",
          "name": "InvalidTickRange",
          "inputs": []
        },
        {
          "type": "error",
          "name": "LaunchesArePaused",
          "inputs": []
        },
        {
          "type": "error",
          "name": "MulDivOverflow",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NotOwner",
          "inputs": []
        },
        {
          "type": "error",
          "name": "NotPendingOwner",
          "inputs": []
        },
        {
          "type": "error",
          "name": "PairAssetNotActive",
          "inputs": [
            {
              "name": "asset",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "PoolAlreadyExists",
          "inputs": [
            {
              "name": "pool",
              "type": "address",
              "internalType": "address"
            }
          ]
        },
        {
          "type": "error",
          "name": "Reentrancy",
          "inputs": []
        },
        {
          "type": "error",
          "name": "TickOutOfBounds",
          "inputs": [
            {
              "name": "tick",
              "type": "int24",
              "internalType": "int24"
            }
          ]
        },
        {
          "type": "error",
          "name": "UnsupportedNativePayment",
          "inputs": []
        },
        {
          "type": "error",
          "name": "ZeroAddress",
          "inputs": []
        }
      ],
      "bytecode": "0x610160604052600160025534801562000016575f80fd5b50604051620098383803806200983883398101604081905262000039916200049c565b846001600160a01b038116620000625760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b03831690811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b0384161580620000c857506001600160a01b038316155b80620000db57506001600160a01b038216155b80620000ee57506001600160a01b038116155b156200010d5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0384163b15806200012d57506001600160a01b0383163b155b806200014157506001600160a01b0382163b155b15620001605760405163c52a9bd360e01b815260040160405180910390fd5b5f836001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001c4919062000518565b90506001600160a01b0381161580620001e557506001600160a01b0381163b155b15620002045760405163c52a9bd360e01b815260040160405180910390fd5b806001600160a01b0316836001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000271919062000518565b6001600160a01b031614620002995760405163c52a9bd360e01b815260040160405180910390fd5b5f836001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002fd919062000518565b90506001600160a01b03811615806200031e57506001600160a01b0381163b155b156200033d5760405163c52a9bd360e01b815260040160405180910390fd5b6040516322afcccb60e01b815261271060048201525f906001600160a01b038416906322afcccb90602401602060405180830381865afa15801562000384573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003aa91906200053d565b90505f8160020b13620003d857604051634cb2d04360e11b8152612710600482015260240160405180910390fd5b6001600160a01b0387811660805286811660a05285811660c05282811660e05283811661010052600282900b61014052600380546001600160a01b03191691861691909117905560405130906200042f9062000476565b6001600160a01b039091168152602001604051809103905ff08015801562000459573d5f803e3d5ffd5b506001600160a01b031661012052506200055f9650505050505050565b6145b0806200528883390190565b6001600160a01b038116811462000499575f80fd5b50565b5f805f805f60a08688031215620004b1575f80fd5b8551620004be8162000484565b6020870151909550620004d18162000484565b6040870151909450620004e48162000484565b6060870151909350620004f78162000484565b60808701519092506200050a8162000484565b809150509295509295909350565b5f6020828403121562000529575f80fd5b8151620005368162000484565b9392505050565b5f602082840312156200054e575f80fd5b81518060020b811462000536575f80fd5b60805160a05160c05160e051610100516101205161014051614c67620006215f395f818161059501528181610ee7015261169c01525f818161069701526117e101525f818161044c015281816119820152611b1601525f81816102d801528181612082015261210401525f8181610560015281816121a6015281816121d4015261235501525f81816104000152818161181301528181611a6801528181612a3801528181612a8c0152612bc601525f818161050701526113500152614c675ff3fe608060405260043610620001eb575f3560e01c8063803db96d1162000106578063d0c93a7c116200009e578063e9368480116200006a578063e9368480146200063c578063f2fde38b1462000660578063f916dad51462000684578063ffcb6e9f14620006b9575f80fd5b8063d0c93a7c1462000582578063d1dc4bd614620005cb578063dd1b9c4a14620005ef578063e30c3978146200061b575f80fd5b80638da5cb5b11620000de5780638da5cb5b14620004d4578063ada066e414620004f4578063b3964f231462000529578063c31c9c07146200054d575f80fd5b8063803db96d146200046e57806384639514146200048f5780638a4940f214620004be575f80fd5b80633bc340c211620001865780637143cf0011620001525780637143cf0014620003ae578063791b98bc14620003ed57806379ba509714620004225780637c887c591462000439575f80fd5b80633bc340c21462000316578063618701e51462000349578063678e0a62146200036d578063680c60c71462000398575f80fd5b80631e887b8211620001c65780631e887b82146200027c57806327cca59f14620002af5780632cebdeb214620002c557806333039d3d14620002fa575f80fd5b806309f9c24014620001ef5780630c5a61f814620002305780630d5d43d31462000256575b5f80fd5b348015620001fb575f80fd5b50620002136200020d3660046200344e565b620006dd565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156200023c575f80fd5b50620002546200024e366004620034ed565b620007c5565b005b6200026d620002673660046200350b565b62000873565b60405162000227919062003546565b34801562000288575f80fd5b50620002a06200029a366004620036bb565b62000de2565b60405190815260200162000227565b348015620002bb575f80fd5b50600654620002a0565b348015620002d1575f80fd5b50620002137f000000000000000000000000000000000000000000000000000000000000000081565b34801562000306575f80fd5b50620002a06001600160801b0381565b34801562000322575f80fd5b506003546200033890600160a01b900460ff1681565b604051901515815260200162000227565b34801562000355575f80fd5b506200025462000367366004620036fe565b62000e58565b34801562000379575f80fd5b5062000384611f4081565b60405161ffff909116815260200162000227565b348015620003a4575f80fd5b50620002a0604081565b348015620003ba575f80fd5b50620003d2620003cc3660046200371c565b62000edc565b60408051600293840b81529190920b60208201520162000227565b348015620003f9575f80fd5b50620002137f000000000000000000000000000000000000000000000000000000000000000081565b3480156200042e575f80fd5b506200025462000f18565b34801562000445575f80fd5b50620002137f000000000000000000000000000000000000000000000000000000000000000081565b3480156200047a575f80fd5b5060035462000213906001600160a01b031681565b3480156200049b575f80fd5b50620002a0620004ad366004620034ed565b60046020525f908152604090205481565b348015620004ca575f80fd5b50620002a0601081565b348015620004e0575f80fd5b505f5462000213906001600160a01b031681565b34801562000500575f80fd5b50620002137f000000000000000000000000000000000000000000000000000000000000000081565b34801562000535575f80fd5b506200026d62000547366004620034ed565b62000f9a565b34801562000559575f80fd5b50620002137f000000000000000000000000000000000000000000000000000000000000000081565b3480156200058e575f80fd5b50620005b77f000000000000000000000000000000000000000000000000000000000000000081565b60405160029190910b815260200162000227565b348015620005d7575f80fd5b5062000213620005e93660046200373c565b620010b5565b348015620005fb575f80fd5b506200060661271081565b60405162ffffff909116815260200162000227565b34801562000627575f80fd5b5060015462000213906001600160a01b031681565b34801562000648575f80fd5b50620002a06200065a366004620037d3565b620010ec565b3480156200066c575f80fd5b50620002546200067e366004620034ed565b6200116f565b34801562000690575f80fd5b50620002137f000000000000000000000000000000000000000000000000000000000000000081565b348015620006c5575f80fd5b5062000213620006d736600462003848565b62001212565b5f80620006ec8a8a8a62000de2565b90505f60405180602001620007019062003355565b601f1982820381018352601f90910116604081905262000730908a908a908a908a908a90309060200162003888565b60408051601f198184030181529082905262000750929160200162003905565b60408051601f1981840301815282825280516020918201206001600160f81b0319828501523060601b6bffffffffffffffffffffffff191660218501526035840195909552605580840195909552815180840390950185526075909201905282519201919091209a9950505050505050505050565b5f546001600160a01b03163314620007f0576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b038116620008185760405163d92e233d60e01b815260040160405180910390fd5b6003546040516001600160a01b038084169216907febf5a90ef4d1ebb443743a6d0e74a95752dc5a5840f9499118a2f22f494ee8b1905f90a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b6200087d62003363565b600254600114620008a15760405163558a1e0360e11b815260040160405180910390fd5b60028055600354600160a01b900460ff1615620008d1576040516301d0a2ad60e51b815260040160405180910390fd5b620008dc8262001243565b3415801590620008ef5750610100820135155b156200090e5760405163c52a9bd360e01b815260040160405180910390fd5b5f8062000923610100850160e08601620034ed565b6001600160a01b0316146200094b5762000945610100840160e08501620034ed565b6200094d565b335b335f818152600460205260408120549293509062000972908361016088013562000de2565b90506200098182600162003931565b335f90815260046020526040812091909155620009a086858462001490565b90505f620009b9828360e00151846101000151620018a5565b82516001600160a01b031687529050620009da6080880160608901620034ed565b6001600160a01b03908116602080890191909152336040808a01919091528783166060808b0191909152845184166080808c019190915286820151851660a0808d019190915287850151861660c0808e01919091528885015190961660e0808e019190915294870151610100808e0191909152938d01356101208d0152918601516101408c01528501516101608b015291850151600290810b6101808b015290850151900b6101a089015262000a9591890190890162003957565b61ffff166101c087015262000ab160e0880160c0890162003957565b866101e0019061ffff16908161ffff16815250504286610200019067ffffffffffffffff16908167ffffffffffffffff16815250508560055f845f01516001600160a01b03166001600160a01b031681526020019081526020015f205f820151815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506060820151816003015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506080820151816004015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060a0820151816005015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060c0820151816006015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060e0820151816007015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c015f6101000a81548162ffffff021916908360020b62ffffff1602179055506101a082015181600c0160036101000a81548162ffffff021916908360020b62ffffff1602179055506101c082015181600c0160066101000a81548161ffff021916908361ffff1602179055506101e082015181600c0160086101000a81548161ffff021916908361ffff16021790555061020082015181600c01600a6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506006825f0151908060018154018082558091505060019003905f5260205f20015f9091909190916101000a8154816001600160a01b0302191690836001600160a01b0316021790555062000db78662001ec1565b6101008701351562000dd25762000dd287835f015162002019565b5050600160025550919392505050565b6040805160a060208201819052600f60c08301526e5354414e4b5f4c41554e43485f563360881b60e083015246928201929092526001600160a01b0385166060820152608081018490529081018290525f90610100016040516020818303038152906040528051906020012090505b9392505050565b5f546001600160a01b0316331462000e83576040516330cd747160e01b815260040160405180910390fd5b60038054821515600160a01b0260ff60a01b199091161790556040517f9bedfef562fbe7be296d01dfde41b3981ea07bf0f7e93ec0c0531e31f28dcb9a9062000ed190831515815260200190565b60405180910390a150565b5f8062000f0c8585857f0000000000000000000000000000000000000000000000000000000000000000620023de565b91509150935093915050565b6001546001600160a01b0316331462000f4457604051630614e5c760e21b815260040160405180910390fd5b5f8054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b62000fa462003363565b506001600160a01b039081165f90815260056020818152604092839020835161022081018552815486168152600182015486169281019290925260028082015486169483019490945260038101548516606083015260048101548516608083015291820154841660a08201526006820154841660c0820152600782015490931660e084015260088101546101008401526009810154610120840152600a810154610140840152600b810154610160840152600c015480820b6101808401526301000000810490910b6101a083015261ffff6601000000000000820481166101c0840152680100000000000000008204166101e083015267ffffffffffffffff600160501b9091041661020082015290565b6001600160a01b0387165f90815260046020526040812054620010e0908990898989898989620006dd565b98975050505050505050565b5f60405180602001620010ff9062003355565b601f1982820381018352601f9091011660408190526200112e9088908890889088908890309060200162003888565b60408051601f19818403018152908290526200114e929160200162003905565b60405160208183030381529060405280519060200120905095945050505050565b5f546001600160a01b031633146200119a576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b038116620011c25760405163d92e233d60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227009190a350565b5f6006828154811062001229576200122962003975565b5f918252602090912001546001600160a01b031692915050565b5f62001250828062003989565b91505f905062001264602084018462003989565b915050811580620012755750604082115b806200127f575080155b806200128b5750601081115b15620012aa57604051635e765b2560e11b815260040160405180910390fd5b60408301351580620012c657506001600160801b036040840135115b15620012e5576040516315ae672760e01b815260040160405180910390fd5b82608001355f036200130a576040516338c51d2560e21b815260040160405180910390fd5b6200131c6080840160608501620034ed565b6001600160a01b03163b5f03620013465760405163c52a9bd360e01b815260040160405180910390fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016637caeeeed620013876080860160608701620034ed565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015620013ca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620013f09190620039cf565b6200143157620014076080840160608501620034ed565b604051633b37d69f60e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b611f406200144660e0850160c0860162003957565b61ffff166200145c60c0860160a0870162003957565b61ffff166200146c919062003931565b146200148b57604051634f8889d560e01b815260040160405180910390fd5b505050565b60408051610120810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915281620014e5858062003989565b620014f4602088018862003989565b886040013530604051620015089062003355565b620015199695949392919062003888565b8190604051809103905ff590508015801562001537573d5f803e3d5ffd5b506001600160a01b03168152620015556080850160608601620034ed565b6001600160a01b0316815f01516001600160a01b0316036200158a5760405163c52a9bd360e01b815260040160405180910390fd5b6200159a61014085018562003989565b159050620016115780516001600160a01b031663a49a1e7d620015c261014087018762003989565b6040518363ffffffff1660e01b8152600401620015e1929190620039ed565b5f604051808303815f87803b158015620015f9575f80fd5b505af11580156200160c573d5f803e3d5ffd5b505050505b620016236080850160608601620034ed565b81516001600160a01b0391821691161060c082018190526200165957620016516080850160608601620034ed565b81516200166d565b80516200166d6080860160608701620034ed565b6001600160a01b0390811660a08401521660808083019190915260c0820151620016c1916040870135908701357f0000000000000000000000000000000000000000000000000000000000000000620023de565b600290810b6101008401520b60e082015260408051610160810190915281516001600160a01b031681525f9060208101620017036080880160608901620034ed565b6001600160a01b0316815260200183608001516001600160a01b031681526020018360a001516001600160a01b0316815260200160035f9054906101000a90046001600160a01b03166001600160a01b03168152602001856001600160a01b0316815260200161271062ffffff1681526020018360e0015160020b815260200183610100015160020b81526020018660a0016020810190620017a6919062003957565b61ffff168152602001620017c160e0880160c0890162003957565b61ffff16905260405163482d240560e11b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063905a480a906200183c90869085907f00000000000000000000000000000000000000000000000000000000000000009060040162003a02565b6060604051808303815f875af115801562001859573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200187f919062003afe565b6001600160a01b0390811660608601529081166020850152166040830152509392505050565b620018e56040518060a001604052805f6001600160a01b031681526020015f81526020015f6001600160801b031681526020015f81526020015f81525090565b5f8460c00151620018f75782620018f9565b835b9050620d89e719600282900b1315806200191a5750620d89e8600282900b12155b1562001938576040516264847d60e41b815260040160405180910390fd5b5f62001944826200254b565b608087015160a0880151604051630b4c774160e11b81526001600160a01b039283166004820152908216602482015261271060448201529192505f917f000000000000000000000000000000000000000000000000000000000000000090911690631698ee8290606401602060405180830381865afa158015620019ca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620019f0919062003b4f565b90506001600160a01b0381161562001a275760405163fb8debc160e01b81526001600160a01b038216600482015260240162001428565b608087015160a08801516040516309f56ab160e11b81526001600160a01b0392831660048201529082166024820152612710604482015283821660648201527f0000000000000000000000000000000000000000000000000000000000000000909116906313ead562906084016020604051808303815f875af115801562001ab1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001ad7919062003b4f565b6001600160a01b039081168552608088015160a0890151604051630b4c774160e11b815291831660048301528216602482015261271060448201525f917f00000000000000000000000000000000000000000000000000000000000000001690631698ee8290606401602060405180830381865afa15801562001b5c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001b82919062003b4f565b85519091506001600160a01b0316158062001bb25750806001600160a01b0316855f01516001600160a01b031614155b1562001bd15760405163c52a9bd360e01b815260040160405180910390fd5b5f805f875f01516001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa15801562001c14573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001c3a919062003b6d565b96505050505092509250856001600160a01b0316836001600160a01b03161462001c96578751604051637a43128760e11b81526001600160a01b0391821660048201528188166024820152908416604482015260640162001428565b8660020b8260020b14158062001caa575080155b1562001cd8578751604051637f471d0560e01b81526001600160a01b03909116600482015260240162001428565b5f62001ce68c8c8c6200298b565b80516020808c01919091528101516001600160801b031660408b015260c08d01519091505f9062001d1c57816040015162001d22565b81606001515b90508c60c0015162001d3957816060015162001d3f565b81604001515b60608b015260408a01516001600160801b0316158062001d61575060608a0151155b8062001d6c57508015155b1562001d8b576040516307f3bf4960e31b815260040160405180910390fd5b8c516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801562001dd1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001df7919062003c1f565b60808b018190521562001e275760608d015160808b01518e5162001e27926001600160a01b039091169162002bf6565b60608d015160208b01518b516040808e015160808f01519151630e3d7c5960e31b815260048101949094526001600160a01b0392831660248501526001600160801b031660448401526064830152909116906371ebe2c8906084015f604051808303815f87803b15801562001e9a575f80fd5b505af115801562001ead573d5f803e3d5ffd5b505050505050505050505050509392505050565b80602001516001600160a01b031681604001516001600160a01b0316825f01516001600160a01b03167fbd658a7c36887321077af255dee7a9e0953479f205651b63e158a9de0f51fb8b846060015185608001518660a001518760c001518860e0015189610100015160405162001f73969594939291906001600160a01b039687168152948616602086015292851660408501529084166060840152909216608082015260a081019190915260c00190565b60405180910390a480516101208201516101408301516101608401516101808501516101a08601516101c08701516101e088015160408051978852602088019690965286860194909452600292830b6060870152910b608085015261ffff90811660a08501521660c0830152516001600160a01b03909216917fcfb88f0464ed3354b59d7afc0b8451282ff05b5ef7269f4b6ea045fc997131809181900360e00190a250565b5f806200202f61014085016101208601620034ed565b6001600160a01b03161462002058576200205261014084016101208501620034ed565b6200205a565b335b90505f6200206f6080850160608601620034ed565b905034156200217a576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016620020b46080860160608701620034ed565b6001600160a01b031614620020dc5760405163d4847afd60e01b815260040160405180910390fd5b8361010001353414620021025760405163c52a9bd360e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004015f604051808303818588803b1580156200215c575f80fd5b505af11580156200216f573d5f803e3d5ffd5b505050505062002196565b620021966001600160a01b038216333061010088013562002cf5565b620021d16001600160a01b0382167f000000000000000000000000000000000000000000000000000000000000000061010087013562002dfd565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663414bf389604051806101000160405280886060016020810190620022229190620034ed565b6001600160a01b03168152602001876001600160a01b0316815260200161271062ffffff168152602001866001600160a01b0316815260200142815260200188610100013581526020015f81526020015f6001600160a01b03168152506040518263ffffffff1660e01b815260040162002300919081516001600160a01b03908116825260208084015182169083015260408084015162ffffff16908301526060808401518216908301526080808401519083015260a0838101519083015260c0808401519083015260e09283015116918101919091526101000190565b6020604051808303815f875af11580156200231d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002343919062003c1f565b90506200237b6001600160a01b0383167f00000000000000000000000000000000000000000000000000000000000000005f62002dfd565b826001600160a01b0316846001600160a01b03167f34b6bd41bb4087aa5e8294323c3f441554c538e0b5107fc056bd9ce45654083d87610100013584604051620023cf929190918252602082015260400190565b60405180910390a35050505050565b5f80831580620023ec575084155b156200240b576040516338c51d2560e21b815260040160405180910390fd5b5f80876200241b5785876200241e565b86865b915091505f6200243083838862002e64565b90505f866200244481620d89e71962003c4b565b62002450919062003c89565b90505f876200246381620d89e862003c4b565b6200246f919062003c89565b90508a15620024c3578160020b8360020b126200248d57826200248f565b815b96505f620024a162021b108962003cb2565b90508160020b8160020b13620024b85780620024ba565b815b96505062002509565b8060020b8360020b13620024d85782620024da565b805b95505f620024ec62021b108862003cda565b90508260020b8160020b1262002503578062002505565b825b9750505b600288900b6200251a888862003cda565b60020b12156200253d576040516318ed623960e01b815260040160405180910390fd5b505050505094509492505050565b5f805f8360020b1262002562578260020b62002571565b8260020b620025719062003d02565b9050620d89e88111156200259f57604051635aaafcdd60e01b8152600284900b600482015260240162001428565b5f816001165f03620025b657600160801b620025c8565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff16905060028216156200260a57608062002605826ffff97272373d413259a46990580e213a62003d1f565b901c90505b60048216156200263757608062002632826ffff2e50f5f656932ef12357cf3c7fdcc62003d1f565b901c90505b6008821615620026645760806200265f826fffe5caca7e10e4e61c3624eaa0941cd062003d1f565b901c90505b6010821615620026915760806200268c826fffcb9843d60f6159c9db58835c92664462003d1f565b901c90505b6020821615620026be576080620026b9826fff973b41fa98c081472e6896dfb254c062003d1f565b901c90505b6040821615620026eb576080620026e6826fff2ea16466c96a3843ec78b326b5286162003d1f565b901c90505b60808216156200271857608062002713826ffe5dee046a99a2a811c461f1969c305362003d1f565b901c90505b6101008216156200274657608062002741826ffcbe86c7900a88aedcffc83b479aa3a462003d1f565b901c90505b610200821615620027745760806200276f826ff987a7253ac413176f2b074cf7815e5462003d1f565b901c90505b610400821615620027a25760806200279d826ff3392b0822b70005940c7a398e4b70f362003d1f565b901c90505b610800821615620027d0576080620027cb826fe7159475a2c29b7443b29c7fa6e889d962003d1f565b901c90505b611000821615620027fe576080620027f9826fd097f3bdfd2022b8845ad8f792aa582562003d1f565b901c90505b6120008216156200282c57608062002827826fa9f746462d870fdf8a65dc1f90e061e562003d1f565b901c90505b6140008216156200285a57608062002855826f70d869a156d2a1b890bb3df62baf32f762003d1f565b901c90505b6180008216156200288857608062002883826f31be135f97d08fd981231505542fcfa662003d1f565b901c90505b62010000821615620028b7576080620028b2826f09aa508b5b7a84e1c677de54f3e99bc962003d1f565b901c90505b62020000821615620028e5576080620028e0826e5d6af8dedb81196699c329225ee60462003d1f565b901c90505b62040000821615620029125760806200290d826d2216e584f5fa1ea926041bedfe9862003d1f565b901c90505b620800008216156200293d57608062002938826b048a170391f7dc42444e8fa262003d1f565b901c90505b5f8460020b1315620029595762002956815f1962003d39565b90505b63ffffffff8116156200296e57600162002970565b5f5b620029839060ff16602083901c62003931565b949350505050565b620029bc60405180608001604052805f81526020015f6001600160801b031681526020015f81526020015f81525090565b5f845f01516001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620029fd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002a23919062003c1f565b855190915062002a5e906001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000008362002dfd565b5f8560c0015162002a70575f62002a72565b815b90505f8660c0015162002a86578262002a88565b5f5b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663883164566040518061016001604052808a608001516001600160a01b031681526020018a60a001516001600160a01b0316815260200161271062ffffff1681526020018960020b81526020018860020b81526020018581526020018481526020015f81526020015f81526020018a606001516001600160a01b03168152602001428152506040518263ffffffff1660e01b815260040162002b57919062003d4f565b6080604051808303815f875af115801562002b74573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002b9a919062003e18565b606088015260408701526001600160801b031660208601528452865162002bec906001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000005f62002dfd565b5050509392505050565b6040516001600160a01b038381166024830152604482018390525f91829186169060640160408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b1790525162002c51919062003e60565b5f604051808303815f865af19150503d805f811462002c8c576040519150601f19603f3d011682016040523d82523d5f602084013e62002c91565b606091505b509150915081158062002cc3575080511580159062002cc357508080602001905181019062002cc19190620039cf565b155b1562002cee57604051634c4537b160e01b81526001600160a01b038616600482015260240162001428565b5050505050565b6040516001600160a01b0384811660248301528381166044830152606482018390525f91829187169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b1790525162002d58919062003e60565b5f604051808303815f865af19150503d805f811462002d93576040519150601f19603f3d011682016040523d82523d5f602084013e62002d98565b606091505b509150915081158062002dca575080511580159062002dca57508080602001905181019062002dc89190620039cf565b155b1562002df557604051634c4537b160e01b81526001600160a01b038716600482015260240162001428565b505050505050565b62002e0a83838362002fee565b1562002e1557505050565b62002e2283835f62002fee565b158062002e39575062002e3783838362002fee565b155b156200148b5760405163ac259b7160e01b81526001600160a01b038416600482015260240162001428565b5f8062002e7784600160c01b87620030c4565b90505f62002e8582620031ad565b90505f62002e9885620d89e71962003c4b565b90505f62002eaa86620d89e862003c4b565b90505b8060020b8260020b121562002f39575f600262002ecf83820b85830b62003e6d565b62002edc90600162003e6d565b62002ee8919062003e8f565b90506001600160a01b03841662002f0a62002f04898462003c89565b6200254b565b6001600160a01b03161162002f225780925062002f32565b62002f2f60018262003cda565b91505b5062002ead565b5f62002f46878462003c89565b905062002f5787620d89e862003c4b565b60020b8360020b1215620010e0575f8762002f7485600162003cb2565b62002f80919062003c89565b90505f62002f8e836200254b565b90505f62002f9c836200254b565b905062002faa878262003ec1565b6001600160a01b031662002fbf838962003ec1565b6001600160a01b03161062002fdf57829850505050505050505062000e51565b50505098975050505050505050565b6040516001600160a01b038381166024830152604482018390525f91829182919087169060640160408051601f198184030181529181526020820180516001600160e01b031663095ea7b360e01b179052516200304c919062003e60565b5f604051808303815f865af19150503d805f811462003087576040519150601f19603f3d011682016040523d82523d5f602084013e6200308c565b606091505b5091509150818015620030ba575080511580620030ba575080806020019051810190620030ba9190620039cf565b9695505050505050565b5f80805f19858709858702925082811083820303915050805f036200312157835f0362003104576040516349248f7760e01b815260040160405180910390fd5b83828162003116576200311662003c37565b049250505062000e51565b80841162003142576040516349248f7760e01b815260040160405180910390fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f815f03620031bd57505f919050565b5f6001620031cb84620032bb565b901c6001901b90506001818481620031e757620031e762003c37565b048201901c9050600181848162003202576200320262003c37565b048201901c905060018184816200321d576200321d62003c37565b048201901c9050600181848162003238576200323862003c37565b048201901c9050600181848162003253576200325362003c37565b048201901c905060018184816200326e576200326e62003c37565b048201901c9050600181848162003289576200328962003c37565b048201901c9050808381620032a257620032a262003c37565b04811115620032b5576001810362000e51565b92915050565b5f608082901c15620032cf57608091821c91015b604082901c15620032e257604091821c91015b602082901c15620032f557602091821c91015b601082901c156200330857601091821c91015b600882901c156200331b57600891821c91015b600482901c156200332e57600491821c91015b600282901c156200334157600291821c91015b600182901c1562003350576001015b919050565b610d4d8062003ee583390190565b60408051610220810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e0810182905261020081019190915290565b6001600160a01b038116811462003403575f80fd5b50565b5f8083601f84011262003417575f80fd5b50813567ffffffffffffffff8111156200342f575f80fd5b60208301915083602082850101111562003447575f80fd5b9250929050565b5f805f805f805f8060c0898b03121562003466575f80fd5b88356200347381620033ee565b97506020890135965060408901359550606089013567ffffffffffffffff808211156200349e575f80fd5b620034ac8c838d0162003406565b909750955060808b0135915080821115620034c5575f80fd5b50620034d48b828c0162003406565b999c989b50969995989497949560a00135949350505050565b5f60208284031215620034fe575f80fd5b813562000e5181620033ee565b5f602082840312156200351c575f80fd5b813567ffffffffffffffff81111562003533575f80fd5b8201610180818503121562000e51575f80fd5b81516001600160a01b03168152610220810160208301516200357360208401826001600160a01b03169052565b5060408301516200358f60408401826001600160a01b03169052565b506060830151620035ab60608401826001600160a01b03169052565b506080830151620035c760808401826001600160a01b03169052565b5060a0830151620035e360a08401826001600160a01b03169052565b5060c0830151620035ff60c08401826001600160a01b03169052565b5060e08301516200361b60e08401826001600160a01b03169052565b506101008381015190830152610120808401519083015261014080840151908301526101608084015190830152610180808401516200365e8285018260020b9052565b50506101a080840151620036768285018260020b9052565b50506101c08381015161ffff81168483015250506101e08381015161ffff81168483015250506102008381015167ffffffffffffffff8116848301525b505092915050565b5f805f60608486031215620036ce575f80fd5b8335620036db81620033ee565b95602085013595506040909401359392505050565b801515811462003403575f80fd5b5f602082840312156200370f575f80fd5b813562000e5181620036f0565b5f805f606084860312156200372f575f80fd5b8335620036db81620036f0565b5f805f805f805f60a0888a03121562003753575f80fd5b87356200376081620033ee565b965060208801359550604088013567ffffffffffffffff8082111562003784575f80fd5b620037928b838c0162003406565b909750955060608a0135915080821115620037ab575f80fd5b50620037ba8a828b0162003406565b989b979a50959894979596608090950135949350505050565b5f805f805f60608688031215620037e8575f80fd5b853567ffffffffffffffff8082111562003800575f80fd5b6200380e89838a0162003406565b9097509550602088013591508082111562003827575f80fd5b50620038368882890162003406565b96999598509660400135949350505050565b5f6020828403121562003859575f80fd5b5035919050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b608081525f6200389d60808301888a62003860565b8281036020840152620038b281878962003860565b604084019590955250506001600160a01b0391909116606090910152949350505050565b5f81515f5b81811015620038f75760208185018101518683015201620038db565b505f93019283525090919050565b5f62002983620039168386620038d6565b84620038d6565b634e487b7160e01b5f52601160045260245ffd5b80820180821115620032b557620032b56200391d565b61ffff8116811462003403575f80fd5b5f6020828403121562003968575f80fd5b813562000e518162003947565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e198436030181126200399f575f80fd5b83018035915067ffffffffffffffff821115620039ba575f80fd5b60200191503681900382131562003447575f80fd5b5f60208284031215620039e0575f80fd5b815162000e5181620036f0565b602081525f6200298360208301848662003860565b83815282516001600160a01b031660208201526101a0810160208401516001600160a01b03811660408401525060408401516001600160a01b03811660608401525060608401516001600160a01b03811660808401525060808401516001600160a01b03811660a08401525060a08401516001600160a01b03811660c08401525060c084015162ffffff811660e08401525060e084015161010062003aab8185018360020b9052565b850151905061012062003ac28482018360020b9052565b850151905061014062003ada8482018361ffff169052565b85015161ffff16610160840152506001600160a01b03831661018083015262002983565b5f805f6060848603121562003b11575f80fd5b835162003b1e81620033ee565b602085015190935062003b3181620033ee565b604085015190925062003b4481620033ee565b809150509250925092565b5f6020828403121562003b60575f80fd5b815162000e5181620033ee565b5f805f805f805f60e0888a03121562003b84575f80fd5b875162003b9181620033ee565b8097505060208801518060020b811462003ba9575f80fd5b604089015190965062003bbc8162003947565b606089015190955062003bcf8162003947565b608089015190945062003be28162003947565b60a089015190935063ffffffff8116811462003bfc575f80fd5b60c089015190925062003c0f81620036f0565b8091505092959891949750929550565b5f6020828403121562003c30575f80fd5b5051919050565b634e487b7160e01b5f52601260045260245ffd5b5f8160020b8360020b8062003c645762003c6462003c37565b627fffff1982145f198214161562003c805762003c806200391d565b90059392505050565b5f8260020b8260020b028060020b915080821462003cab5762003cab6200391d565b5092915050565b600281810b9083900b01627fffff8113627fffff1982121715620032b557620032b56200391d565b600282810b9082900b03627fffff198112627fffff82131715620032b557620032b56200391d565b5f600160ff1b820162003d195762003d196200391d565b505f0390565b8082028115828204841417620032b557620032b56200391d565b5f8262003d4a5762003d4a62003c37565b500490565b81516001600160a01b031681526101608101602083015162003d7c60208401826001600160a01b03169052565b50604083015162003d94604084018262ffffff169052565b50606083015162003daa606084018260020b9052565b50608083015162003dc0608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e08301526101008084015181840152506101208084015162003e07828501826001600160a01b03169052565b505061014092830151919092015290565b5f805f806080858703121562003e2c575f80fd5b8451935060208501516001600160801b038116811462003e4a575f80fd5b6040860151606090960151949790965092505050565b5f62000e518284620038d6565b8082018281125f831280158216821582161715620036b357620036b36200391d565b5f8262003ea05762003ea062003c37565b600160ff1b82145f198414161562003ebc5762003ebc6200391d565b500590565b6001600160a01b0382811682821603908082111562003cab5762003cab6200391d56fe60a060405234801562000010575f80fd5b5060405162000d4d38038062000d4d833981016040819052620000339162000198565b6001600160a01b0381166200005b5760405163d92e233d60e01b815260040160405180910390fd5b336080525f6200006c8582620002b1565b5060016200007b8482620002b1565b5060038290556001600160a01b0381165f818152600460209081526040808320869055518581527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050506200037d565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112620000fb575f80fd5b81516001600160401b0380821115620001185762000118620000d7565b604051601f8301601f19908116603f01168101908282118183101715620001435762000143620000d7565b816040528381526020925086602085880101111562000160575f80fd5b5f91505b8382101562000183578582018301518183018401529082019062000164565b5f602085830101528094505050505092915050565b5f805f8060808587031215620001ac575f80fd5b84516001600160401b0380821115620001c3575f80fd5b620001d188838901620000eb565b95506020870151915080821115620001e7575f80fd5b50620001f687828801620000eb565b60408701516060880151919550935090506001600160a01b03811681146200021c575f80fd5b939692955090935050565b600181811c908216806200023c57607f821691505b6020821081036200025b57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620002ac57805f5260205f20601f840160051c81016020851015620002885750805b601f840160051c820191505b81811015620002a9575f815560010162000294565b50505b505050565b81516001600160401b03811115620002cd57620002cd620000d7565b620002e581620002de845462000227565b8462000261565b602080601f8311600181146200031b575f8415620003035750858301515b5f19600386901b1c1916600185901b17855562000375565b5f85815260208120601f198616915b828110156200034b578886015182559484019460019091019084016200032a565b50858210156200036957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b6080516109b16200039c5f395f818160ee01526104c701526109b15ff3fe608060405234801561000f575f80fd5b50600436106100e5575f3560e01c806342966c681161008857806395d89b411161006357806395d89b411461020d578063a49a1e7d14610215578063a9059cbb14610228578063dd62ed3e1461023b575f80fd5b806342966c68146101b157806351431d4f146101c657806370a08231146101ee575f80fd5b8063095ea7b3116100c3578063095ea7b31461014a57806318160ddd1461016d57806323b872dd14610184578063313ce56714610197575f80fd5b806302669b52146100e957806303ee438c1461012d57806306fdde0314610142575b5f80fd5b6101107f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b610135610265565b604051610124919061065f565b6101356102f1565b61015d6101583660046106c6565b6102fd565b6040519015158152602001610124565b61017660035481565b604051908152602001610124565b61015d6101923660046106ee565b610368565b61019f601281565b60405160ff9091168152602001610124565b6101c46101bf366004610727565b61042a565b005b6101356040518060400160405280600981526020016839ba30b73597333ab760b91b81525081565b6101766101fc36600461073e565b60046020525f908152604090205481565b6101356104af565b6101c461022336600461075e565b6104bc565b61015d6102363660046106c6565b61057d565b6101766102493660046107ca565b600560209081525f928352604080842090915290825290205481565b60028054610272906107fb565b80601f016020809104026020016040519081016040528092919081815260200182805461029e906107fb565b80156102e95780601f106102c0576101008083540402835291602001916102e9565b820191905f5260205f20905b8154815290600101906020018083116102cc57829003601f168201915b505050505081565b5f8054610272906107fb565b335f8181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103579086815260200190565b60405180910390a350600192915050565b6001600160a01b0383165f9081526005602090815260408083203384529091528120545f19811461041457828110156103b4576040516313be252b60e01b815260040160405180910390fd5b6001600160a01b0385165f81815260056020908152604080832033808552908352928190208786039081905590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b61041f858585610592565b506001949350505050565b335f908152600460205260409020548181101561045a57604051631e9acf1760e31b815260040160405180910390fd5b335f8181526004602090815260408083208686039055600380548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60018054610272906107fb565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105055760405163ed6fcad960e01b815260040160405180910390fd5b60028054610512906107fb565b15905061053257604051631c02c93960e31b815260040160405180910390fd5b600261053f828483610893565b507f69354b8b791679340802bbe48036393ca1a4cdc6c29e8352bfb1e845c3c03108828260405161057192919061094d565b60405180910390a15050565b5f610589338484610592565b50600192915050565b6001600160a01b0382166105b95760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383165f90815260046020526040902054818110156105f257604051631e9acf1760e31b815260040160405180910390fd5b6001600160a01b038085165f8181526004602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906106519086815260200190565b60405180910390a350505050565b5f602080835283518060208501525f5b8181101561068b5785810183015185820160400152820161066f565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146106c1575f80fd5b919050565b5f80604083850312156106d7575f80fd5b6106e0836106ab565b946020939093013593505050565b5f805f60608486031215610700575f80fd5b610709846106ab565b9250610717602085016106ab565b9150604084013590509250925092565b5f60208284031215610737575f80fd5b5035919050565b5f6020828403121561074e575f80fd5b610757826106ab565b9392505050565b5f806020838503121561076f575f80fd5b823567ffffffffffffffff80821115610786575f80fd5b818501915085601f830112610799575f80fd5b8135818111156107a7575f80fd5b8660208285010111156107b8575f80fd5b60209290920196919550909350505050565b5f80604083850312156107db575f80fd5b6107e4836106ab565b91506107f2602084016106ab565b90509250929050565b600181811c9082168061080f57607f821691505b60208210810361082d57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52604160045260245ffd5b601f82111561088e57805f5260205f20601f840160051c8101602085101561086c5750805b601f840160051c820191505b8181101561088b575f8155600101610878565b50505b505050565b67ffffffffffffffff8311156108ab576108ab610833565b6108bf836108b983546107fb565b83610847565b5f601f8411600181146108f0575f85156108d95750838201355b5f19600387901b1c1916600186901b17835561088b565b5f83815260208120601f198716915b8281101561091f57868501358255602094850194600190920191016108ff565b508682101561093b575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f1916010191905056fea26469706673582212203ed92376ff530b4428ce2923d5720b48501b48f4b95b024ceb90846c3120936064736f6c63430008180033a2646970667358221220863e615b7d4fe619fd8c4793692d880529dfc578d59bfd8c6d59bfd985e6ce1464736f6c6343000818003360a060405234801561000f575f80fd5b506040516145b03803806145b083398101604081905261002e91610066565b6001600160a01b0381166100555760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0316608052610093565b5f60208284031215610076575f80fd5b81516001600160a01b038116811461008c575f80fd5b9392505050565b6080516144f96100b75f395f8181607f0152818160c7015261038501526144f95ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c8063905a480a14610038578063c45a01551461007a575b5f80fd5b61004b6100463660046104fb565b6100b9565b604080516001600160a01b03948516815292841660208401529216918101919091526060015b60405180910390f35b6100a17f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610071565b5f8080336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461010557604051631966391b60e11b815260040160405180910390fd5b8560405160200161013e918152604060208201819052600e908201526d484f4c4445525f5245574152445360901b606082015260800190565b60408051601f1981840301815291905280516020918201209061016390870187610546565b6101736040880160208901610546565b30604051610180906104ba565b6001600160a01b039384168152918316602083015290911660408201526060018190604051809103905ff59050801580156101bd573d5f803e3d5ffd5b509250856040516020016101f7918152604060208201819052600c908201526b149155d0549117d59055531560a21b606082015260800190565b604051602081830303815290604052805190602001208560200160208101906102209190610546565b61023060a0880160808901610546565b61024060c0890160a08a01610546565b866102536101408b016101208c01610568565b6102656101608c016101408d01610568565b604051610271906104c8565b6001600160a01b039687168152948616602086015292851660408501529316606083015261ffff92831660808301529190911660a082015260c0018190604051809103905ff59050801580156102c9573d5f803e3d5ffd5b50604051636f07318560e01b81526001600160a01b03808316600483015291935090841690636f073185906024015f604051808303815f87803b15801561030e575f80fd5b505af1158015610320573d5f803e3d5ffd5b505050508560405160200161035f9181526040602082018190526010908201526f2822a926a0a722a72a2fa627a1a5a2a960811b606082015260800190565b6040516020818303038152906040528051906020012084836040518061010001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001895f0160208101906103c49190610546565b6001600160a01b031681526020018960200160208101906103e59190610546565b6001600160a01b0316815260200161040360608b0160408c01610546565b6001600160a01b0316815260200161042160808b0160608c01610546565b6001600160a01b0316815260200161043f60e08b0160c08c01610589565b62ffffff16815260200161045a6101008b0160e08c016105ab565b60020b81526020016104746101208b016101008c016105ab565b60020b9052604051610485906104d6565b610491939291906105cb565b8190604051809103905ff59050801580156104ae573d5f803e3d5ffd5b50905093509350939050565b611b1c806200067883390190565b610d42806200219483390190565b6115ee8062002ed683390190565b6001600160a01b03811681146104f8575f80fd5b50565b5f805f8385036101a081121561050f575f80fd5b84359350610160601f1982011215610525575f80fd5b5060208401915061018084013561053b816104e4565b809150509250925092565b5f60208284031215610556575f80fd5b8135610561816104e4565b9392505050565b5f60208284031215610578575f80fd5b813561ffff81168114610561575f80fd5b5f60208284031215610599575f80fd5b813562ffffff81168114610561575f80fd5b5f602082840312156105bb575f80fd5b81358060020b8114610561575f80fd5b5f6101408201905060018060a01b038086168352808516602084015280845116604084015280602085015116606084015280604085015116608084015250606083015161062360a08401826001600160a01b03169052565b5060808301516001600160a01b031660c08381019190915260a084015162ffffff1660e0840152830151600281900b6101008401525060e083015161066e61012084018260020b9052565b5094935050505056fe60e060405260015f5534801562000014575f80fd5b5060405162001b1c38038062001b1c8339810160408190526200003791620000bd565b6001600160a01b03831615806200005557506001600160a01b038216155b806200006857506001600160a01b038116155b15620000875760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0392831660805290821660a0521660c0526200010e565b6001600160a01b0381168114620000ba575f80fd5b50565b5f805f60608486031215620000d0575f80fd5b8351620000dd81620000a5565b6020850151909350620000f081620000a5565b60408501519092506200010381620000a5565b809150509250925092565b60805160a05160c0516119ab620001715f395f81816103df015261063301525f81816102610152818161059e015281816106af01528181610e03015261114b01525f818161039c01528181610a9301528181610b650152610cca01526119ab5ff3fe608060405234801561000f575f80fd5b50600436106101db575f3560e01c80636f1570a211610109578063a694fc3a1161009e578063c128ab5c1161006e578063c128ab5c14610420578063c918be7f14610433578063df136d651461043c578063ef5cfb8c14610445575f80fd5b8063a694fc3a146103be578063a9b52c0a146103d1578063acba7b42146103da578063b2d44ff414610401575f80fd5b80638b876347116100d95780638b876347146103465780638d7ce096146103655780639e2c8a5b14610384578063a28a4d8614610397575f80fd5b80636f1570a21461030957806372c0c2111461032d5780637b0a47ee146103355780638274ba381461033e575f80fd5b8063322ce4131161017f5780634940fbbd1161014f5780634940fbbd146102b95780636138889b146102d857806363d38c3b146102eb5780636f073185146102f4575f80fd5b8063322ce4131461025357806339191d7b1461025c5780633a2c67771461029b5780633d6aa5e1146102ae575f80fd5b806327c409b2116101ba57806327c409b21461022d57806327cb956d1461023657806328f73148146102405780632e46a2ee14610249575f80fd5b80628cc262146101df578063128fced1146102055780631921e9ae14610224575b5f80fd5b6101f26101ed366004611792565b610458565b6040519081526020015b60405180910390f35b6101f2610213366004611792565b600f6020525f908152604090205481565b6101f260055481565b6101f260065481565b6101f26201518081565b6101f260025481565b6101f262093a8081565b6101f260075481565b6102837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101fc565b600154610283906001600160a01b031681565b6101f2600160801b81565b6101f26102c7366004611792565b600c6020525f908152604090205481565b6101f26102e63660046117ad565b6104ca565b6101f260085481565b610307610302366004611792565b610628565b005b60015461031d90600160a01b900460ff1681565b60405190151581526020016101fc565b6101f2610830565b6101f260045481565b6101f2610868565b6101f2610354366004611792565b600e6020525f908152604090205481565b6101f2610373366004611792565b600d6020525f908152604090205481565b61030761039236600461181c565b6109c7565b6102837f000000000000000000000000000000000000000000000000000000000000000081565b6103076103cc36600461183c565b610afe565b6101f260095481565b6102837f000000000000000000000000000000000000000000000000000000000000000081565b6101f261040f366004611792565b600b6020525f908152604090205481565b6101f261042e366004611792565b610c0c565b6101f2600a5481565b6101f260035481565b6101f2610453366004611792565b610d3c565b5f80610462610e73565b6001600160a01b0384165f908152600d6020908152604080832054600e909252909120549192506104a1916104979084611867565b600160801b610f3f565b6001600160a01b0384165f908152600f60205260409020546104c39190611880565b9392505050565b5f80546001146104ed5760405163558a1e0360e11b815260040160405180910390fd5b60025f556104f9611021565b50815f5b8181101561061c575f85858381811061051857610518611893565b905060200201602081019061052d9190611792565b905061053881611265565b6001600160a01b0381165f908152600f60205260408120549081900361055f575050610614565b6001600160a01b0382165f908152600f60205260408120819055600a805483929061058b908490611867565b909155506105c590506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383611305565b6040518181526001600160a01b0383169081907fbe9e10e3b822c4894ad59507abc176cf53170c60d1de07c15e4a081116836ae89060200160405180910390a361060f8186611880565b945050505b6001016104fd565b505060015f5592915050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461067157604051632919263560e11b815260040160405180910390fd5b600154600160a01b900460ff161561069c5760405163ef340a3960e01b815260040160405180910390fd5b6001600160a01b038116158061074357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03166339191d7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610713573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061073791906118a7565b6001600160a01b031614155b806107bf5750306001600160a01b0316816001600160a01b03166331bd828a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561078f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107b391906118a7565b6001600160a01b031614155b156107dd57604051630681d31960e51b815260040160405180910390fd5b600180546001600160a81b0319166001600160a01b038316908117600160a01b17909155426006556040517fdb596eff382488fb5ef5c8fb8e3349df94c8d97621032d7533036832f8803048905f90a250565b5f80546001146108535760405163558a1e0360e11b815260040160405180910390fd5b60025f5561085f611021565b60015f55919050565b5f805460011461088b5760405163558a1e0360e11b815260040160405180910390fd5b5060025f908155338152600b6020526040812054908190036108c057604051631f2a200560e01b815260040160405180910390fd5b335f908152600c60205260409020544210156108ef57604051632968c44760e21b815260040160405180910390fd5b6108f7611021565b5061090133611265565b335f908152600b60209081526040808320839055600c8252808320839055600d90915281208054839290610936908490611880565b90915550506002545f6109498383611880565b90506fffffffffffffffffffffffffffffffff81111561097c5760405163718d953960e11b815260040160405180910390fd5b60028190556109896113fa565b60405183815233907f90aa42af5b05005c0caf7c48ac144734b352d1ae35feadabba0590fd01f955d49060200160405180910390a2505060015f5590565b5f546001146109e95760405163558a1e0360e11b815260040160405180910390fd5b60025f55811580156109f9575080155b15610a1757604051631f2a200560e01b815260040160405180910390fd5b335f908152600b6020526040902054821180610a405750335f908152600d602052604090205481115b15610a5e576040516378de4a6960e11b815260040160405180910390fd5b610a66611021565b50610a7033611265565b610a7b33838361141c565b610aba33610a898385611880565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190611305565b604080518381526020810183905233917f7fc4727e062e336010f2c282598ef5f14facb3de68cf8195c2f23e1454b2b74e91015b60405180910390a2505060015f55565b5f54600114610b205760405163558a1e0360e11b815260040160405180910390fd5b60025f908155819003610b4657604051631f2a200560e01b815260040160405180910390fd5b610b4e611021565b50610b5833611265565b610b8d6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163330846114cd565b335f908152600b602052604081208054839290610bab908490611880565b909155505f9050610bbf6201518042611880565b335f818152600c6020908152604091829020849055815186815290810184905292935090917f77f7ca96a635452e21140dee851f46ffdf575e45f1135419bc4a493d63a97e099101610aee565b5f8054600114610c2f5760405163558a1e0360e11b815260040160405180910390fd5b60025f556001600160a01b038216610c5a5760405163d92e233d60e01b815260040160405180910390fd5b610c626115cb565b610c6b33611265565b335f908152600b6020908152604080832054600d90925290912054610c908183611880565b9250825f03610cb257604051631f2a200560e01b815260040160405180910390fd5b610cbd33838361141c565b610cf16001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585611305565b6040518381526001600160a01b0385169033907f70632bec5bf61e265cd526069725155aff57014cd59ab089845dceb2c98987749060200160405180910390a3505060015f55919050565b5f8054600114610d5f5760405163558a1e0360e11b815260040160405180910390fd5b60025f556001600160a01b038216610d8a5760405163d92e233d60e01b815260040160405180910390fd5b610d92611021565b50610d9c33611265565b50335f908152600f602052604081205490819003610dcd576040516312d37ee560e31b815260040160405180910390fd5b335f908152600f60205260408120819055600a8054839290610df0908490611867565b90915550610e2a90506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383611305565b6040518181526001600160a01b0383169033907fbe9e10e3b822c4894ad59507abc176cf53170c60d1de07c15e4a081116836ae89060200160405180910390a360015f55919050565b6003546002545f819003610e85575090565b5f6005544210610e9757600554610e99565b425b90506006548111610ea957505090565b5f60045460065483610ebb9190611867565b610ec591906118c2565b90506005548203610ee057600954610edd9082611880565b90505b5f610ef082600160801b86610f3f565b90505f6007548580610f0457610f046118d9565b600160801b8509610f159190611880565b9050610f2185826118ed565b610f2b9083611880565b610f359087611880565b9550505050505090565b5f80805f19858709858702925082811083820303915050805f03610f9657835f03610f7d576040516349248f7760e01b815260040160405180910390fd5b838281610f8c57610f8c6118d9565b04925050506104c3565b808411610fb6576040516349248f7760e01b815260040160405180910390fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6001545f90600160a01b900460ff1661104d57604051630e1c329160e21b815260040160405180910390fd5b6110556115cb565b60015460405163402914f560e01b81523060048201525f916001600160a01b03169063402914f590602401602060405180830381865afa15801561109b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110bf9190611900565b9050801561113457600154604051630f41a04d60e11b81523060048201526001600160a01b0390911690631e83409a906024016020604051808303815f875af115801561110e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111329190611900565b505b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611198573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111bc9190611900565b9050600a548110156111f857600a54604051630ffcc6b560e11b81526111ef918391600401918252602082015260400190565b60405180910390fd5b600a546112059082611867565b600a8290559250821561121b5761121b83611674565b6004546005546040805186815260208101939093528201527fa132b284280ee6a0cfff213b15d0f97a7e8119369a828c9cd5c026f76ecf874e9060600160405180910390a1505090565b6003546001600160a01b0382165f908152600e602052604081205461128a9083611867565b90508015611300576001600160a01b0383165f908152600d60205260409020546112b99082600160801b610f3f565b6001600160a01b0384165f908152600f6020526040812080549091906112e0908490611880565b90915550506001600160a01b0383165f908152600e602052604090208290555b505050565b6040516001600160a01b038381166024830152604482018390525f91829186169060640160408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b1790525161135e9190611917565b5f604051808303815f865af19150503d805f8114611397576040519150601f19603f3d011682016040523d82523d5f602084013e61139c565b606091505b50915091508115806113ca57508051158015906113ca5750808060200190518101906113c89190611943565b155b156113f357604051634c4537b160e01b81526001600160a01b03861660048201526024016111ef565b5050505050565b6008541580159061140c575060025415155b1561141a5761141a5f611674565b565b8115611485576001600160a01b0383165f908152600b602052604081208054849290611449908490611867565b90915550506001600160a01b0383165f908152600b60205260408120549003611485576001600160a01b0383165f908152600c60205260408120555b8015611300576001600160a01b0383165f908152600d6020526040812080548392906114b2908490611867565b90915550506002546114c48282611867565b60025550505050565b6040516001600160a01b0384811660248301528381166044830152606482018390525f91829187169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b1790525161152e9190611917565b5f604051808303815f865af19150503d805f8114611567576040519150601f19603f3d011682016040523d82523d5f602084013e61156c565b606091505b509150915081158061159a575080511580159061159a5750808060200190518101906115989190611943565b155b156115c357604051634c4537b160e01b81526001600160a01b03871660048201526024016111ef565b505050505050565b5f60055442106115dd576005546115df565b425b6006549091508082116115f0575050565b6004545f906115ff8385611867565b61160991906118c2565b90506005548314801561161d575060095415155b156116365760095461162f9082611880565b5f60095590505b600254811561166c57805f03611662578160085f8282546116579190611880565b9091555061166c9050565b61166c8282611707565b505050600655565b5f6005544210611684575f61169f565b600454426005546116959190611867565b61169f91906118c2565b90505f60095460085483856116b49190611880565b6116be9190611880565b6116c89190611880565b5f60085590506116db62093a80826118ed565b6004556116eb62093a8082611962565b6009556116fb62093a8042611880565b60055550504260065550565b5f61171783600160801b84610f3f565b90505f600754838061172b5761172b6118d9565b600160801b860961173c9190611880565b905061174883826118ed565b6117529083611880565b60035f8282546117629190611880565b9091555061177290508382611962565b60075550505050565b6001600160a01b038116811461178f575f80fd5b50565b5f602082840312156117a2575f80fd5b81356104c38161177b565b5f80602083850312156117be575f80fd5b823567ffffffffffffffff808211156117d5575f80fd5b818501915085601f8301126117e8575f80fd5b8135818111156117f6575f80fd5b8660208260051b850101111561180a575f80fd5b60209290920196919550909350505050565b5f806040838503121561182d575f80fd5b50508035926020909101359150565b5f6020828403121561184c575f80fd5b5035919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561187a5761187a611853565b92915050565b8082018082111561187a5761187a611853565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156118b7575f80fd5b81516104c38161177b565b808202811582820484141761187a5761187a611853565b634e487b7160e01b5f52601260045260245ffd5b5f826118fb576118fb6118d9565b500490565b5f60208284031215611910575f80fd5b5051919050565b5f82515f5b81811015611936576020818601810151858301520161191c565b505f920191825250919050565b5f60208284031215611953575f80fd5b815180151581146104c3575f80fd5b5f82611970576119706118d9565b50069056fea2646970667358221220c88f985fbfb887b52b276f92ea5d276d1b1a4a8e0bdd960ef2849c9df54bf19c64736f6c6343000818003361014060405260015f5534801562000015575f80fd5b5060405162000d4238038062000d42833981016040819052620000389162000133565b6001600160a01b03861615806200005657506001600160a01b038516155b806200006957506001600160a01b038416155b806200007c57506001600160a01b038316155b156200009b5760405163d92e233d60e01b815260040160405180910390fd5b611f40620000b161ffff838116908516620001b0565b14620000d05760405163bcd55b0f60e01b815260040160405180910390fd5b6001600160a01b0395861660805293851660a05291841660c05290921660e05261ffff918216610100521661012052620001d6565b80516001600160a01b03811681146200011c575f80fd5b919050565b805161ffff811681146200011c575f80fd5b5f805f805f8060c0878903121562000149575f80fd5b620001548762000105565b9550620001646020880162000105565b9450620001746040880162000105565b9350620001846060880162000105565b9250620001946080880162000121565b9150620001a460a0880162000121565b90509295509295509295565b80820180821115620001d057634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05160c05160e0516101005161012051610ae66200025c5f395f818161021d015261058801525f81816102a1015261055101525f818161016701526106c601525f818160f9015261067301525f81816102600152818161078501526107ac01525f81816101d7015281816103810152818161042f01526107630152610ae65ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c80635aaf8d3a11610093578063c1e7af3511610063578063c1e7af351461028b578063c2c4c5c114610294578063de90e29b1461029c578063e1a45218146102c3575f80fd5b80635aaf8d3a14610218578063678e0a6214610252578063803db96d1461025b5780639583612e14610282575f80fd5b806331bd828a116100ce57806331bd828a14610162578063377f7dac1461018957806339191d7b146101d2578063402914f5146101f9575f80fd5b806302d05d3f146100f45780630937eb54146101385780631e83409a1461014f575b5f80fd5b61011b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61014160015481565b60405190815260200161012f565b61014161015d366004610990565b6102cc565b61011b7f000000000000000000000000000000000000000000000000000000000000000081565b6003546101ad9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161012f565b61011b7f000000000000000000000000000000000000000000000000000000000000000081565b610141610207366004610990565b60046020525f908152604090205481565b61023f7f000000000000000000000000000000000000000000000000000000000000000081565b60405161ffff909116815260200161012f565b61023f611f4081565b61011b7f000000000000000000000000000000000000000000000000000000000000000081565b61014160025481565b61023f6107d081565b6101416103f1565b61023f7f000000000000000000000000000000000000000000000000000000000000000081565b61023f61271081565b5f80546001146102ef5760405163558a1e0360e11b815260040160405180910390fd5b60025f556001600160a01b03821661031a5760405163d92e233d60e01b815260040160405180910390fd5b50335f908152600460205260408120549081900361034b576040516312d37ee560e31b815260040160405180910390fd5b335f9081526004602052604081208190556001805483929061036e9084906109d1565b909155506103a890506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383610821565b6040518181526001600160a01b0383169033907f0aa4d283470c904c551d18bb894d37e17674920f3261a7f854be501e25f421b79060200160405180910390a360015f55919050565b5f80546001146104145760405163558a1e0360e11b815260040160405180910390fd5b60025f9081556040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561047c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a091906109ea565b600154909150808210156104d65760405163164ce27760e11b815260048101839052602481018290526044015b60405180910390fd5b6104e081836109d1565b9250825f036104f3575f9250505061081a565b6040805160608101825260035461ffff808216808452620100008304821660208501526401000000009092041692820192909252905f9081908190819081908190610543908b906107d090610916565b809750819450505061057a8a7f00000000000000000000000000000000000000000000000000000000000000008960200151610916565b80965081935050506105b18a7f00000000000000000000000000000000000000000000000000000000000000008960400151610916565b6002549095509091505f906105c6908c610a01565b90505f826105d48587610a01565b6105de9190610a01565b90508181111561060157604051639380f6eb60e01b815260040160405180910390fd5b61060b858c6109d1565b60015561061881836109d1565b6002556040805160608101825261ffff8a81168083528a82166020808501829052928b169385018490526003805463ffffffff1916909217620100009091021765ffff000000001916640100000000909302929092179091557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165f908152600490915290812080548692906106b7908490610a01565b90915550506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165f9081526004602052604081208054859290610703908490610a01565b9091555050604080518d815260208101879052908101859052606081018490527f2b474ee2827617180689991241b82214d5f6bed1a1d99e22ec1c42faad485ca19060800160405180910390a1841561080e576107aa6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610821565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167ffbdf8f37e5ca176280f690fe9f911bf05c77c058dd3657d892b2092df403a3a18660405161080591815260200190565b60405180910390a25b50505050505050505050505b60015f5590565b6040516001600160a01b038381166024830152604482018390525f91829186169060640160408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b1790525161087a9190610a14565b5f604051808303815f865af19150503d805f81146108b3576040519150601f19603f3d011682016040523d82523d5f602084013e6108b8565b606091505b50915091508115806108e657508051158015906108e65750808060200190518101906108e49190610a40565b155b1561090f57604051634c4537b160e01b81526001600160a01b03861660048201526024016104cd565b5050505050565b5f8061ffff841661092961271087610a73565b6109339190610a86565b91505f61ffff80851690861661094b61271089610a9d565b6109559190610a86565b61095f9190610a01565b905061096d61271082610a73565b6109779084610a01565b925061098561271082610a9d565b915050935093915050565b5f602082840312156109a0575f80fd5b81356001600160a01b03811681146109b6575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156109e4576109e46109bd565b92915050565b5f602082840312156109fa575f80fd5b5051919050565b808201808211156109e4576109e46109bd565b5f82515f5b81811015610a335760208186018101518583015201610a19565b505f920191825250919050565b5f60208284031215610a50575f80fd5b815180151581146109b6575f80fd5b634e487b7160e01b5f52601260045260245ffd5b5f82610a8157610a81610a5f565b500490565b80820281158282048414176109e4576109e46109bd565b5f82610aab57610aab610a5f565b50069056fea26469706673582212204ed9265152222c5416c1913794a1a7c6da2131a6b34f1f1449d34712d83bf84c64736f6c634300081800336101e060405260015f5534801562000015575f80fd5b50604051620015ee380380620015ee833981016040819052620000389162000211565b80516001600160a01b031615806200005757506001600160a01b038316155b806200006a57506001600160a01b038216155b8062000081575060208101516001600160a01b0316155b8062000098575060408101516001600160a01b0316155b15620000b75760405163c52a9bd360e01b815260040160405180910390fd5b5f836001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000f5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200011b919062000332565b90506001600160a01b038116620001455760405163c52a9bd360e01b815260040160405180910390fd5b81516001600160a01b0390811660e0908152948116608090815291811660a090815293811660c09081526020840151821661010052604084015182166101205260608401518216610140529183015116610160529181015162ffffff166101805290810151600290810b6101a052910151900b6101c05262000357565b6001600160a01b0381168114620001d7575f80fd5b50565b8051620001e781620001c2565b919050565b805162ffffff81168114620001e7575f80fd5b8051600281900b8114620001e7575f80fd5b5f805f83850361014081121562000226575f80fd5b84516200023381620001c2565b60208601519094506200024681620001c2565b9250610100603f1982018113156200025c575f80fd5b60405191508082016001600160401b03811183821017156200028c57634e487b7160e01b5f52604160045260245ffd5b80604052506200029f60408701620001da565b8252620002af60608701620001da565b6020830152620002c260808701620001da565b6040830152620002d560a08701620001da565b6060830152620002e860c08701620001da565b6080830152620002fb60e08701620001ec565b60a08301526200030d818701620001ff565b60c083015250620003226101208601620001ff565b60e0820152809150509250925092565b5f6020828403121562000343575f80fd5b81516200035081620001c2565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c05161118a620004645f395f81816102260152610be701525f81816102600152610bb601525f818161011a0152818161099c0152610b8101525f8181610392015281816109740152610b4401525f818161015a0152818161094c0152610b0801525f81816101d80152818161056901526105ef01525f818161033b015281816106d3015281816107750152610c5c01525f818161036b015261082701525f81816101ff01528181610611015261063801525f818161031401526109cb01525f81816102ed015281816103c0015281816104e5015281816108ba0152610a68015261118a5ff3fe608060405234801561000f575f80fd5b5060043610610111575f3560e01c806371640de31161009e5780637c887c591161006e5780637c887c591461030f578063a28a4d8614610336578063ae8bd4611461035d578063c45a015514610366578063d21220a71461038d575f80fd5b806371640de31461029f57806371ebe2c8146102b6578063767b5c8b146102cb578063791b98bc146102e8575f80fd5b806339191d7b116100e457806339191d7b146101d35780633a2c6777146101fa57806355b812a81461022157806359c4f9051461025b57806370bb45b314610282575f80fd5b8063089fe6aa146101155780630dfe168114610155578063150b7a021461019457806316f0115b146101c0575b5f80fd5b61013c7f000000000000000000000000000000000000000000000000000000000000000081565b60405162ffffff90911681526020015b60405180910390f35b61017c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161014c565b6101a76101a2366004610e82565b6103b4565b6040516001600160e01b0319909116815260200161014c565b60015461017c906001600160a01b031681565b61017c7f000000000000000000000000000000000000000000000000000000000000000081565b61017c7f000000000000000000000000000000000000000000000000000000000000000081565b6102487f000000000000000000000000000000000000000000000000000000000000000081565b60405160029190910b815260200161014c565b6102487f000000000000000000000000000000000000000000000000000000000000000081565b61028a610434565b6040805192835260208301919091520161014c565b6102a860025481565b60405190815260200161014c565b6102c96102c4366004610f2d565b61081c565b005b6004546102d89060ff1681565b604051901515815260200161014c565b61017c7f000000000000000000000000000000000000000000000000000000000000000081565b61017c7f000000000000000000000000000000000000000000000000000000000000000081565b61017c7f000000000000000000000000000000000000000000000000000000000000000081565b6102a860035481565b61017c7f000000000000000000000000000000000000000000000000000000000000000081565b61017c7f000000000000000000000000000000000000000000000000000000000000000081565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103fe5760405163ed5f09f160e01b815260040160405180910390fd5b60045460ff161561042257604051634f6b715960e01b815260040160405180910390fd5b50630a85bd0160e11b95945050505050565b5f805f546001146104585760405163558a1e0360e11b815260040160405180910390fd5b60025f5560045460ff1661047f576040516325e7bcc160e21b815260040160405180910390fd5b60408051608081018252600254815230602082019081526001600160801b0382840181815260608401828152945163fc6f786560e01b81529351600485015291516001600160a01b039081166024850152915181166044840152925190921660648201527f00000000000000000000000000000000000000000000000000000000000000009091169063fc6f78659060840160408051808303815f875af115801561052c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105509190610f72565b50506040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156105b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105da9190610f94565b905080156106bc576106366001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000083610d72565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c2c4c5c16040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610693573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106b79190610f94565b508092505b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610720573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107449190610f94565b600354909150808211156107d55761075c8183610fab565b604051630852cd8d60e31b8152600481018290529094507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c68906024015f604051808303815f87803b1580156107be575f80fd5b505af11580156107d0573d5f803e3d5ffd5b505050505b60025460408051878152602081018790527fa54e6c2fc0861aa9c991b26891d71059d517983b9e84b91020f42609c452eb9d910160405180910390a2505060015f55509091565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461086557604051631966391b60e11b815260040160405180910390fd5b60045460ff161561088957604051634f6b715960e01b815260040160405180910390fd5b6001600160a01b038316158061092f57506040516331a9108f60e11b81526004810185905230906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156108ff573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109239190610fe0565b6001600160a01b031614155b80610a425750604051630b4c774160e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000062ffffff166044830152848116917f000000000000000000000000000000000000000000000000000000000000000090911690631698ee8290606401602060405180830381865afa158015610a12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a369190610fe0565b6001600160a01b031614155b15610a605760405163673f032f60e11b815260040160405180910390fd5b5f805f805f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166399fbab888b6040518263ffffffff1660e01b8152600401610ab491815260200190565b61018060405180830381865afa158015610ad0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610af49190611030565b5050505097509750975097509750975050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316141580610b7957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b80610bae57507f000000000000000000000000000000000000000000000000000000000000000062ffffff168462ffffff1614155b80610bdf57507f000000000000000000000000000000000000000000000000000000000000000060020b8360020b14155b80610c1057507f000000000000000000000000000000000000000000000000000000000000000060020b8260020b14155b80610c2257506001600160801b038116155b80610c3f5750876001600160801b0316816001600160801b031614155b80610ccf57506040516370a0823160e01b815230600482015287907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610ca9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ccd9190610f94565b105b15610ced5760405163673f032f60e11b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b038b16908117825560028c905560038990556004805460ff1916909217909155604080516001600160801b0384168152602081018a90528c917fbb9ee35159e357e36b323dbb0bda6c82a7410642783e1ae06f7506808db0796c910160405180910390a350505050505050505050565b6040516001600160a01b038381166024830152604482018390525f91829186169060640160408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b17905251610dcb9190611109565b5f604051808303815f865af19150503d805f8114610e04576040519150601f19603f3d011682016040523d82523d5f602084013e610e09565b606091505b5091509150811580610e375750805115801590610e37575080806020019051810190610e359190611135565b155b15610e6457604051634c4537b160e01b81526001600160a01b038616600482015260240160405180910390fd5b5050505050565b6001600160a01b0381168114610e7f575f80fd5b50565b5f805f805f60808688031215610e96575f80fd5b8535610ea181610e6b565b94506020860135610eb181610e6b565b935060408601359250606086013567ffffffffffffffff80821115610ed4575f80fd5b818801915088601f830112610ee7575f80fd5b813581811115610ef5575f80fd5b896020828501011115610f06575f80fd5b9699959850939650602001949392505050565b6001600160801b0381168114610e7f575f80fd5b5f805f8060808587031215610f40575f80fd5b843593506020850135610f5281610e6b565b92506040850135610f6281610f19565b9396929550929360600135925050565b5f8060408385031215610f83575f80fd5b505080516020909101519092909150565b5f60208284031215610fa4575f80fd5b5051919050565b81810381811115610fca57634e487b7160e01b5f52601160045260245ffd5b92915050565b8051610fdb81610e6b565b919050565b5f60208284031215610ff0575f80fd5b8151610ffb81610e6b565b9392505050565b805162ffffff81168114610fdb575f80fd5b8051600281900b8114610fdb575f80fd5b8051610fdb81610f19565b5f805f805f805f805f805f806101808d8f03121561104c575f80fd5b8c516bffffffffffffffffffffffff81168114611067575f80fd5b9b5061107560208e01610fd0565b9a5061108360408e01610fd0565b995061109160608e01610fd0565b985061109f60808e01611002565b97506110ad60a08e01611014565b96506110bb60c08e01611014565b95506110c960e08e01611025565b94506101008d015193506101208d015192506110e86101408e01611025565b91506110f76101608e01611025565b90509295989b509295989b509295989b565b5f82515f5b81811015611128576020818601810151858301520161110e565b505f920191825250919050565b5f60208284031215611145575f80fd5b81518015158114610ffb575f80fdfea2646970667358221220a380753643ea8e4de5419807daba13eb8d79637b9c9988d9273b271436725cd164736f6c63430008180033a264697066735822122014ead16a90abc07bac3d9d1722f2979f1fd1a1bc232614c97b8c5aa39d5793ab64736f6c63430008180033",
      "constructorArgs": [
        "$owner",
        "$pairRegistry",
        "$positionManager",
        "$swapRouter",
        "$treasury"
      ]
    }
  ]
}
