{
  "contractName": "ProxyFactory",
  "abi": [
    {
      "inputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "proxy",
          "type": "address"
        }
      ],
      "name": "ProxyCreated",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_logic",
          "type": "address"
        },
        {
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "deployMinimal",
      "outputs": [
        {
          "name": "proxy",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_salt",
          "type": "uint256"
        },
        {
          "name": "_logic",
          "type": "address"
        },
        {
          "name": "_admin",
          "type": "address"
        },
        {
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "deploy",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_salt",
          "type": "uint256"
        },
        {
          "name": "_logic",
          "type": "address"
        },
        {
          "name": "_admin",
          "type": "address"
        },
        {
          "name": "_data",
          "type": "bytes"
        },
        {
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "deploySigned",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_salt",
          "type": "uint256"
        },
        {
          "name": "_sender",
          "type": "address"
        }
      ],
      "name": "getDeploymentAddress",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_salt",
          "type": "uint256"
        },
        {
          "name": "_logic",
          "type": "address"
        },
        {
          "name": "_admin",
          "type": "address"
        },
        {
          "name": "_data",
          "type": "bytes"
        },
        {
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "getSigner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b506040518060200161002190610040565b602082018103825280604052508051906020012060008190555061004d565b610d3e80611e0283390190565b611da68061005c6000396000f3fe608060405234801561001057600080fd5b5060043610610074576000357c010000000000000000000000000000000000000000000000000000000090048063290f8f5614610079578063332d6626146102555780636150864c1461043157806381ae1f5b14610576578063b3eeb5e214610604575b600080fd5b610213600480360360a081101561008f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156100f657600080fd5b82018360208201111561010857600080fd5b8035906020019184600183028401116401000000008311171561012a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561018d57600080fd5b82018360208201111561019f57600080fd5b803590602001918460018302840111640100000000831117156101c157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061071f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103ef600480360360a081101561026b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156102d257600080fd5b8201836020820111156102e457600080fd5b8035906020019184600183028401116401000000008311171561030657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561036957600080fd5b82018360208201111561037b57600080fd5b8035906020019184600183028401116401000000008311171561039d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610887565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105346004803603608081101561044757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156104ae57600080fd5b8201836020820111156104c057600080fd5b803590602001918460018302840111640100000000831117156104e257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610957565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105c26004803603604081101561058c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610970565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106dd6004803603604081101561061a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561065757600080fd5b82018360208201111561066957600080fd5b8035906020019184600183028401116401000000008311171561068b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610a88565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008061086f8787878730604051602001808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140183805190602001908083835b6020831015156107ea57805182526020820191506020810190506020830392506107c5565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019550505050505060405160208183030381529060405280519060200120610c33565b905061087b8184610c8b565b91505095945050505050565b600080610897878787878761071f565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561093e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496e76616c6964207369676e617475726500000000000000000000000000000081525060200191505060405180910390fd5b61094b8787878785610d92565b91505095945050505050565b60006109668585858533610d92565b9050949350505050565b60008061097d8484610f64565b9050600060ff7f010000000000000000000000000000000000000000000000000000000000000002308360005460405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018381526020018281526020019450505050506040516020818303038152906040528051906020012090506060819060020a026c0100000000000000000000000090049250505092915050565b600080836c010000000000000000000000000290506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f09250507efffc2da0b561cae30d9826d37709e9421c4725faebc226cbbb7ef5fc5e734982604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600083511115610c2c5760008273ffffffffffffffffffffffffffffffffffffffff16846040518082805190602001908083835b602083101515610bb35780518252602082019150602081019050602083039250610b8e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610c15576040519150601f19603f3d011682016040523d82523d6000602084013e610c1a565b606091505b50509050801515610c2a57600080fd5b505b5092915050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600060418251141515610ca15760009050610d8c565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082600190041115610cf65760009350505050610d8c565b601b8160ff1614158015610d0e5750601c8160ff1614155b15610d1f5760009350505050610d8c565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610d7c573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b600080610d9f8784610fd8565b90507efffc2da0b561cae30d9826d37709e9421c4725faebc226cbbb7ef5fc5e734981604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18073ffffffffffffffffffffffffffffffffffffffff1663cf7a1d778787876040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610ef1578082015181840152602081019050610ed6565b50505050905090810190601f168015610f1e5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015610f3f57600080fd5b505af1158015610f53573d6000803e3d6000fd5b505050508091505095945050505050565b60008282604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019250505060405160208183030381529060405280519060200120905092915050565b600080606060405180602001610fed9061102f565b60208201810382528060405250905060006110088686610f64565b9050808251602084016000f59250823b151561102357600080fd5b82935050505092915050565b610d3e8061103d8339019056fe608060405234801561001057600080fd5b50610d1e806100206000396000f3fe60806040526004361061008d576000357c0100000000000000000000000000000000000000000000000000000000900480638f2839701161006b5780638f283970146101d8578063cf7a1d7714610229578063d1f5789414610324578063f851a440146103ff5761008d565b80633659cfe6146100975780634f1ef286146100e85780635c60da1b14610181575b610095610456565b005b3480156100a357600080fd5b506100e6600480360360208110156100ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610470565b005b61017f600480360360408110156100fe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561013b57600080fd5b82018360208201111561014d57600080fd5b8035906020019184600183028401116401000000008311171561016f57600080fd5b90919293919293905050506104c5565b005b34801561018d57600080fd5b5061019661059d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101e457600080fd5b50610227600480360360208110156101fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105f5565b005b6103226004803603606081101561023f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561029c57600080fd5b8201836020820111156102ae57600080fd5b803590602001918460018302840111640100000000831117156102d057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610770565b005b6103fd6004803603604081101561033a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561037757600080fd5b82018360208201111561038957600080fd5b803590602001918460018302840111640100000000831117156103ab57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061082d565b005b34801561040b57600080fd5b50610414610992565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61045e6109ea565b61046e610469610a82565b610ab3565b565b610478610ad9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156104b9576104b481610b0a565b6104c2565b6104c1610456565b5b50565b6104cd610ad9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561058f5761050983610b0a565b60008373ffffffffffffffffffffffffffffffffffffffff168383604051808383808284378083019250505092505050600060405180830381855af49150503d8060008114610574576040519150601f19603f3d011682016040523d82523d6000602084013e610579565b606091505b5050905080151561058957600080fd5b50610598565b610597610456565b5b505050565b60006105a7610ad9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156105e9576105e2610a82565b90506105f2565b6105f1610456565b5b90565b6105fd610ad9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561076457600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156106b8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180610c5f6036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6106e1610ad9565b82604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a161075f81610b59565b61076d565b61076c610456565b5b50565b600073ffffffffffffffffffffffffffffffffffffffff16610790610a82565b73ffffffffffffffffffffffffffffffffffffffff161415156107b257600080fd5b6107bc838261082d565b60405180807f6f72672e7a657070656c696e6f732e70726f78792e61646d696e000000000000815250601a01905060405180910390207f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60010214151561081f57fe5b61082882610b59565b505050565b600073ffffffffffffffffffffffffffffffffffffffff1661084d610a82565b73ffffffffffffffffffffffffffffffffffffffff1614151561086f57600080fd5b6040518080610c9560239139602301905060405180910390207f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c36001021415156108b557fe5b6108be82610b88565b60008151111561098e5760008273ffffffffffffffffffffffffffffffffffffffff16826040518082805190602001908083835b60208310151561091757805182526020820191506020810190506020830392506108f2565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610977576040519150601f19603f3d011682016040523d82523d6000602084013e61097c565b606091505b5050905080151561098c57600080fd5b505b5050565b600061099c610ad9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156109de576109d7610ad9565b90506109e7565b6109e6610456565b5b90565b6109f2610ad9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151515610a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180610c2d6032913960400191505060405180910390fd5b610a80610c17565b565b6000807f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c36001029050805491505090565b3660008037600080366000845af43d6000803e8060008114610ad4573d6000f35b3d6000fd5b6000807f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b6001029050805491505090565b610b1381610b88565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60010290508181555050565b610b9181610c19565b1515610be8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180610cb8603b913960400191505060405180910390fd5b60007f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c360010290508181555050565b565b600080823b90506000811191505091905056fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f20616464726573736f72672e7a657070656c696e6f732e70726f78792e696d706c656d656e746174696f6e43616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a165627a7a72305820961108d62b0c3f193b4691322839e21fd76c2a61adcd4dffd9553e4d65f22ab30029a165627a7a72305820338e951112d17033d6c5279606a01d024703ef8a10d2c9f93b3c97c93ff544f90029608060405234801561001057600080fd5b50610d1e806100206000396000f3fe60806040526004361061008d576000357c0100000000000000000000000000000000000000000000000000000000900480638f2839701161006b5780638f283970146101d8578063cf7a1d7714610229578063d1f5789414610324578063f851a440146103ff5761008d565b80633659cfe6146100975780634f1ef286146100e85780635c60da1b14610181575b610095610456565b005b3480156100a357600080fd5b506100e6600480360360208110156100ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610470565b005b61017f600480360360408110156100fe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561013b57600080fd5b82018360208201111561014d57600080fd5b8035906020019184600183028401116401000000008311171561016f57600080fd5b90919293919293905050506104c5565b005b34801561018d57600080fd5b5061019661059d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101e457600080fd5b50610227600480360360208110156101fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105f5565b005b6103226004803603606081101561023f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561029c57600080fd5b8201836020820111156102ae57600080fd5b803590602001918460018302840111640100000000831117156102d057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610770565b005b6103fd6004803603604081101561033a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561037757600080fd5b82018360208201111561038957600080fd5b803590602001918460018302840111640100000000831117156103ab57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061082d565b005b34801561040b57600080fd5b50610414610992565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61045e6109ea565b61046e610469610a82565b610ab3565b565b610478610ad9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156104b9576104b481610b0a565b6104c2565b6104c1610456565b5b50565b6104cd610ad9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561058f5761050983610b0a565b60008373ffffffffffffffffffffffffffffffffffffffff168383604051808383808284378083019250505092505050600060405180830381855af49150503d8060008114610574576040519150601f19603f3d011682016040523d82523d6000602084013e610579565b606091505b5050905080151561058957600080fd5b50610598565b610597610456565b5b505050565b60006105a7610ad9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156105e9576105e2610a82565b90506105f2565b6105f1610456565b5b90565b6105fd610ad9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561076457600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156106b8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180610c5f6036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6106e1610ad9565b82604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a161075f81610b59565b61076d565b61076c610456565b5b50565b600073ffffffffffffffffffffffffffffffffffffffff16610790610a82565b73ffffffffffffffffffffffffffffffffffffffff161415156107b257600080fd5b6107bc838261082d565b60405180807f6f72672e7a657070656c696e6f732e70726f78792e61646d696e000000000000815250601a01905060405180910390207f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60010214151561081f57fe5b61082882610b59565b505050565b600073ffffffffffffffffffffffffffffffffffffffff1661084d610a82565b73ffffffffffffffffffffffffffffffffffffffff1614151561086f57600080fd5b6040518080610c9560239139602301905060405180910390207f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c36001021415156108b557fe5b6108be82610b88565b60008151111561098e5760008273ffffffffffffffffffffffffffffffffffffffff16826040518082805190602001908083835b60208310151561091757805182526020820191506020810190506020830392506108f2565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610977576040519150601f19603f3d011682016040523d82523d6000602084013e61097c565b606091505b5050905080151561098c57600080fd5b505b5050565b600061099c610ad9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156109de576109d7610ad9565b90506109e7565b6109e6610456565b5b90565b6109f2610ad9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151515610a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180610c2d6032913960400191505060405180910390fd5b610a80610c17565b565b6000807f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c36001029050805491505090565b3660008037600080366000845af43d6000803e8060008114610ad4573d6000f35b3d6000fd5b6000807f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b6001029050805491505090565b610b1381610b88565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60010290508181555050565b610b9181610c19565b1515610be8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180610cb8603b913960400191505060405180910390fd5b60007f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c360010290508181555050565b565b600080823b90506000811191505091905056fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f20616464726573736f72672e7a657070656c696e6f732e70726f78792e696d706c656d656e746174696f6e43616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a165627a7a72305820961108d62b0c3f193b4691322839e21fd76c2a61adcd4dffd9553e4d65f22ab30029",
  "deployedBytecode": "0x608060405234801561001057600080fd5b5060043610610074576000357c010000000000000000000000000000000000000000000000000000000090048063290f8f5614610079578063332d6626146102555780636150864c1461043157806381ae1f5b14610576578063b3eeb5e214610604575b600080fd5b610213600480360360a081101561008f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156100f657600080fd5b82018360208201111561010857600080fd5b8035906020019184600183028401116401000000008311171561012a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561018d57600080fd5b82018360208201111561019f57600080fd5b803590602001918460018302840111640100000000831117156101c157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061071f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103ef600480360360a081101561026b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156102d257600080fd5b8201836020820111156102e457600080fd5b8035906020019184600183028401116401000000008311171561030657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561036957600080fd5b82018360208201111561037b57600080fd5b8035906020019184600183028401116401000000008311171561039d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610887565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105346004803603608081101561044757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156104ae57600080fd5b8201836020820111156104c057600080fd5b803590602001918460018302840111640100000000831117156104e257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610957565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105c26004803603604081101561058c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610970565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106dd6004803603604081101561061a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561065757600080fd5b82018360208201111561066957600080fd5b8035906020019184600183028401116401000000008311171561068b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610a88565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008061086f8787878730604051602001808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140183805190602001908083835b6020831015156107ea57805182526020820191506020810190506020830392506107c5565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019550505050505060405160208183030381529060405280519060200120610c33565b905061087b8184610c8b565b91505095945050505050565b600080610897878787878761071f565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561093e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496e76616c6964207369676e617475726500000000000000000000000000000081525060200191505060405180910390fd5b61094b8787878785610d92565b91505095945050505050565b60006109668585858533610d92565b9050949350505050565b60008061097d8484610f64565b9050600060ff7f010000000000000000000000000000000000000000000000000000000000000002308360005460405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018381526020018281526020019450505050506040516020818303038152906040528051906020012090506060819060020a026c0100000000000000000000000090049250505092915050565b600080836c010000000000000000000000000290506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f09250507efffc2da0b561cae30d9826d37709e9421c4725faebc226cbbb7ef5fc5e734982604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600083511115610c2c5760008273ffffffffffffffffffffffffffffffffffffffff16846040518082805190602001908083835b602083101515610bb35780518252602082019150602081019050602083039250610b8e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610c15576040519150601f19603f3d011682016040523d82523d6000602084013e610c1a565b606091505b50509050801515610c2a57600080fd5b505b5092915050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600060418251141515610ca15760009050610d8c565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082600190041115610cf65760009350505050610d8c565b601b8160ff1614158015610d0e5750601c8160ff1614155b15610d1f5760009350505050610d8c565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610d7c573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b600080610d9f8784610fd8565b90507efffc2da0b561cae30d9826d37709e9421c4725faebc226cbbb7ef5fc5e734981604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18073ffffffffffffffffffffffffffffffffffffffff1663cf7a1d778787876040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610ef1578082015181840152602081019050610ed6565b50505050905090810190601f168015610f1e5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015610f3f57600080fd5b505af1158015610f53573d6000803e3d6000fd5b505050508091505095945050505050565b60008282604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019250505060405160208183030381529060405280519060200120905092915050565b600080606060405180602001610fed9061102f565b60208201810382528060405250905060006110088686610f64565b9050808251602084016000f59250823b151561102357600080fd5b82935050505092915050565b610d3e8061103d8339019056fe608060405234801561001057600080fd5b50610d1e806100206000396000f3fe60806040526004361061008d576000357c0100000000000000000000000000000000000000000000000000000000900480638f2839701161006b5780638f283970146101d8578063cf7a1d7714610229578063d1f5789414610324578063f851a440146103ff5761008d565b80633659cfe6146100975780634f1ef286146100e85780635c60da1b14610181575b610095610456565b005b3480156100a357600080fd5b506100e6600480360360208110156100ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610470565b005b61017f600480360360408110156100fe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561013b57600080fd5b82018360208201111561014d57600080fd5b8035906020019184600183028401116401000000008311171561016f57600080fd5b90919293919293905050506104c5565b005b34801561018d57600080fd5b5061019661059d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101e457600080fd5b50610227600480360360208110156101fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105f5565b005b6103226004803603606081101561023f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561029c57600080fd5b8201836020820111156102ae57600080fd5b803590602001918460018302840111640100000000831117156102d057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610770565b005b6103fd6004803603604081101561033a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561037757600080fd5b82018360208201111561038957600080fd5b803590602001918460018302840111640100000000831117156103ab57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061082d565b005b34801561040b57600080fd5b50610414610992565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61045e6109ea565b61046e610469610a82565b610ab3565b565b610478610ad9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156104b9576104b481610b0a565b6104c2565b6104c1610456565b5b50565b6104cd610ad9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561058f5761050983610b0a565b60008373ffffffffffffffffffffffffffffffffffffffff168383604051808383808284378083019250505092505050600060405180830381855af49150503d8060008114610574576040519150601f19603f3d011682016040523d82523d6000602084013e610579565b606091505b5050905080151561058957600080fd5b50610598565b610597610456565b5b505050565b60006105a7610ad9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156105e9576105e2610a82565b90506105f2565b6105f1610456565b5b90565b6105fd610ad9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561076457600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156106b8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180610c5f6036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6106e1610ad9565b82604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a161075f81610b59565b61076d565b61076c610456565b5b50565b600073ffffffffffffffffffffffffffffffffffffffff16610790610a82565b73ffffffffffffffffffffffffffffffffffffffff161415156107b257600080fd5b6107bc838261082d565b60405180807f6f72672e7a657070656c696e6f732e70726f78792e61646d696e000000000000815250601a01905060405180910390207f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60010214151561081f57fe5b61082882610b59565b505050565b600073ffffffffffffffffffffffffffffffffffffffff1661084d610a82565b73ffffffffffffffffffffffffffffffffffffffff1614151561086f57600080fd5b6040518080610c9560239139602301905060405180910390207f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c36001021415156108b557fe5b6108be82610b88565b60008151111561098e5760008273ffffffffffffffffffffffffffffffffffffffff16826040518082805190602001908083835b60208310151561091757805182526020820191506020810190506020830392506108f2565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610977576040519150601f19603f3d011682016040523d82523d6000602084013e61097c565b606091505b5050905080151561098c57600080fd5b505b5050565b600061099c610ad9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156109de576109d7610ad9565b90506109e7565b6109e6610456565b5b90565b6109f2610ad9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151515610a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180610c2d6032913960400191505060405180910390fd5b610a80610c17565b565b6000807f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c36001029050805491505090565b3660008037600080366000845af43d6000803e8060008114610ad4573d6000f35b3d6000fd5b6000807f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b6001029050805491505090565b610b1381610b88565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60010290508181555050565b610b9181610c19565b1515610be8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180610cb8603b913960400191505060405180910390fd5b60007f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c360010290508181555050565b565b600080823b90506000811191505091905056fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f20616464726573736f72672e7a657070656c696e6f732e70726f78792e696d706c656d656e746174696f6e43616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a165627a7a72305820961108d62b0c3f193b4691322839e21fd76c2a61adcd4dffd9553e4d65f22ab30029a165627a7a72305820338e951112d17033d6c5279606a01d024703ef8a10d2c9f93b3c97c93ff544f90029",
  "sourceMap": "116:3358:35:-;;;220:130;8:9:-1;5:2;;;30:1;27;20:12;5:2;220:130:35;283:56;;;;;;;;:::i;:::-;41:4:-1;34:5;30:16;25:3;21:26;14:5;7:41;65:3;61:2;54:15;283:56:35;266:79;;;;;;247:16;:98;;;;116:3358;;;;;;;;;;:::o;:::-;;;;;;;",
  "deployedSourceMap": "116:3358:35:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;116:3358:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2132:380;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;2132:380:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;2132:380:35;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2132:380:35;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;2132:380:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;2132:380:35;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;2132:380:35;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2132:380:35;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;2132:380:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;2132:380:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1288:337;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1288:337:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1288:337:35;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1288:337:35;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1288:337:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1288:337:35;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1288:337:35;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1288:337:35;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1288:337:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1288:337:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1104:180;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1104:180:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1104:180:35;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1104:180:35;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1104:180:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1104:180:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1629:499;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1629:499:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;354:746;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;354:746:35;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;354:746:35;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;354:746:35;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;354:746:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;354:746:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2132:380;2264:7;2279:15;2297:156;2386:5;2393:6;2401;2409:5;2424:4;2358:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2358:81:35;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2358:81:35;;;2339:108;;;;;;2297:34;:156::i;:::-;2279:174;;2467:40;2487:7;2496:10;2467:19;:40::i;:::-;2460:47;;;2132:380;;;;;;;:::o;1288:337::-;1418:7;1433:14;1450:51;1460:5;1467:6;1475;1483:5;1490:10;1450:9;:51::i;:::-;1433:68;;1533:1;1515:20;;:6;:20;;;;1507:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1570;1583:5;1590:6;1598;1606:5;1613:6;1570:12;:50::i;:::-;1563:57;;;1288:337;;;;;;;:::o;1104:180::-;1203:7;1225:54;1238:5;1245:6;1253;1261:5;1268:10;1225:12;:54::i;:::-;1218:61;;1104:180;;;;;;:::o;1629:499::-;1712:7;1877:12;1892:24;1901:5;1908:7;1892:8;:24::i;:::-;1877:39;;1922:18;1993:4;1986:12;;2016:4;2031;2045:16;;1960:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1960:109:35;;;1943:132;;;;;;1922:153;;2119:2;2105:10;:16;;;;2089:34;;;2082:41;;;;1629:499;;;;:::o;354:746::-;429:13;588:19;618:6;610:15;;588:37;;667:4;661:11;693:66;686:5;679:81;792:11;785:4;778:5;774:16;767:37;836:66;829:4;822:5;818:16;811:92;936:4;929:5;926:1;919:22;910:31;;640:307;962:28;983:5;962:28;;;;;;;;;;;;;;;;;;;;;;1015:1;1000:5;:12;:16;997:95;;;1027:12;1044:5;:10;;1055:5;1044:17;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1044:17:35;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;1026:35:35;;;1077:7;1069:16;;;;;;;;997:95;;354:746;;;;;:::o;3128:265:5:-;3197:7;3380:4;3327:58;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3327:58:5;;;3317:69;;;;;;3310:76;;3128:265;;;:::o;1087:1891::-;1165:7;1246:2;1226:9;:16;:22;;1222:72;;;1280:1;1264:19;;;;1222:72;1360:9;1379;1398:7;1644:4;1633:9;1629:20;1623:27;1618:32;;1689:4;1678:9;1674:20;1668:27;1663:32;;1742:4;1731:9;1727:20;1721:27;1718:1;1713:36;1708:41;;2660:66;2655:1;2647:10;;;:79;2643:127;;;2757:1;2742:17;;;;;;;2643:127;2789:2;2784:1;:7;;;;:18;;;;;2800:2;2795:1;:7;;;;2784:18;2780:66;;;2833:1;2818:17;;;;;;;2780:66;2947:24;2957:4;2963:1;2966;2969;2947:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2947:24:5;;;;;;;;2940:31;;;;;1087:1891;;;;;:::o;2516:329:35:-;2640:7;2655:43;2701:28;2714:5;2721:7;2701:12;:28::i;:::-;2655:74;;2740:28;2761:5;2740:28;;;;;;;;;;;;;;;;;;;;;;2774:5;:16;;;2791:6;2799;2807:5;2774:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2774:39:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2774:39:35;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2774:39:35;;;;2834:5;2819:21;;;2516:329;;;;;;;:::o;3328:144::-;3401:7;3450:5;3457:7;3433:32;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3433:32:35;;;3423:43;;;;;;3416:50;;3328:144;;;;:::o;2849:475::-;2921:37;2966:20;2992:17;3012:56;;;;;;;;:::i;:::-;41:4:-1;34:5;30:16;25:3;21:26;14:5;7:41;65:3;61:2;54:15;3012:56:35;2992:76;;3074:12;3089:24;3098:5;3105:7;3089:8;:24::i;:::-;3074:39;;3186:4;3179;3173:11;3166:4;3160;3156:15;3153:1;3145:46;3137:54;;3220:4;3208:17;3201:25;3198:2;;;3247:1;3244;3237:12;3198:2;3314:4;3269:50;;;;;2849:475;;;;:::o;116:3358::-;;;;;;;;:::o",
  "source": "pragma solidity ^0.5.3;\n\nimport \"./InitializableAdminUpgradeabilityProxy.sol\";\nimport \"../cryptography/ECDSA.sol\";\n\ncontract ProxyFactory {\n  \n  event ProxyCreated(address proxy);\n\n  bytes32 private contractCodeHash;\n\n  constructor() public {\n    contractCodeHash = keccak256(\n      type(InitializableAdminUpgradeabilityProxy).creationCode\n    );\n  }\n\n  function deployMinimal(address _logic, bytes memory _data) public returns (address proxy) {\n    // Adapted from https://github.com/optionality/clone-factory/blob/32782f82dfc5a00d103a7e61a17a5dedbd1e8e9d/contracts/CloneFactory.sol\n    bytes20 targetBytes = bytes20(_logic);\n    assembly {\n      let clone := mload(0x40)\n      mstore(clone, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n      mstore(add(clone, 0x14), targetBytes)\n      mstore(add(clone, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n      proxy := create(0, clone, 0x37)\n    }\n    \n    emit ProxyCreated(address(proxy));\n\n    if(_data.length > 0) {\n      (bool success,) = proxy.call(_data);\n      require(success);\n    }    \n  }\n\n  function deploy(uint256 _salt, address _logic, address _admin, bytes memory _data) public returns (address) {\n    return _deployProxy(_salt, _logic, _admin, _data, msg.sender);\n  }\n\n  function deploySigned(uint256 _salt, address _logic, address _admin, bytes memory _data, bytes memory _signature) public returns (address) {\n    address signer = getSigner(_salt, _logic, _admin, _data, _signature);\n    require(signer != address(0), \"Invalid signature\");\n    return _deployProxy(_salt, _logic, _admin, _data, signer);\n  }\n\n  function getDeploymentAddress(uint256 _salt, address _sender) public view returns (address) {\n    // Adapted from https://github.com/archanova/solidity/blob/08f8f6bedc6e71c24758d20219b7d0749d75919d/contracts/contractCreator/ContractCreator.sol\n    bytes32 salt = _getSalt(_salt, _sender);\n    bytes32 rawAddress = keccak256(\n      abi.encodePacked(\n        bytes1(0xff),\n        address(this),\n        salt,\n        contractCodeHash\n      )\n    );\n\n    return address(bytes20(rawAddress << 96));\n  }\n\n  function getSigner(uint256 _salt, address _logic, address _admin, bytes memory _data, bytes memory _signature) public view returns (address) {\n    bytes32 msgHash = ZOSLibECDSA.toEthSignedMessageHash(\n      keccak256(\n        abi.encodePacked(\n          _salt, _logic, _admin, _data, address(this)\n        )\n      )\n    );\n\n    return ZOSLibECDSA.recover(msgHash, _signature);\n  }\n\n  function _deployProxy(uint256 _salt, address _logic, address _admin, bytes memory _data, address _sender) internal returns (address) {\n    InitializableAdminUpgradeabilityProxy proxy = _createProxy(_salt, _sender);\n    emit ProxyCreated(address(proxy));\n    proxy.initialize(_logic, _admin, _data);\n    return address(proxy);\n  }\n\n  function _createProxy(uint256 _salt, address _sender) internal returns (InitializableAdminUpgradeabilityProxy) {\n    address payable addr;\n    bytes memory code = type(InitializableAdminUpgradeabilityProxy).creationCode;\n    bytes32 salt = _getSalt(_salt, _sender);\n\n    assembly {\n      addr := create2(0, add(code, 0x20), mload(code), salt)\n      if iszero(extcodesize(addr)) {\n        revert(0, 0)\n      }\n    }\n\n    return InitializableAdminUpgradeabilityProxy(addr);\n  }\n\n  function _getSalt(uint256 _salt, address _sender) internal pure returns (bytes32) {\n    return keccak256(abi.encodePacked(_salt, _sender)); \n  }\n}",
  "sourcePath": "/home/spalladino/Projects/sdk/zos/packages/lib/contracts/upgradeability/ProxyFactory.sol",
  "ast": {
    "absolutePath": "/home/spalladino/Projects/sdk/zos/packages/lib/contracts/upgradeability/ProxyFactory.sol",
    "exportedSymbols": {
      "ProxyFactory": [
        5901
      ]
    },
    "id": 5902,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 5601,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".3"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:35"
      },
      {
        "absolutePath": "/home/spalladino/Projects/sdk/zos/packages/lib/contracts/upgradeability/InitializableAdminUpgradeabilityProxy.sol",
        "file": "./InitializableAdminUpgradeabilityProxy.sol",
        "id": 5602,
        "nodeType": "ImportDirective",
        "scope": 5902,
        "sourceUnit": 5387,
        "src": "25:53:35",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/spalladino/Projects/sdk/zos/packages/lib/contracts/cryptography/ECDSA.sol",
        "file": "../cryptography/ECDSA.sol",
        "id": 5603,
        "nodeType": "ImportDirective",
        "scope": 5902,
        "sourceUnit": 869,
        "src": "79:35:35",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [
          5386
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 5901,
        "linearizedBaseContracts": [
          5901
        ],
        "name": "ProxyFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": null,
            "id": 5607,
            "name": "ProxyCreated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5606,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5605,
                  "indexed": false,
                  "name": "proxy",
                  "nodeType": "VariableDeclaration",
                  "scope": 5607,
                  "src": "164:13:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5604,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "164:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "163:15:35"
            },
            "src": "145:34:35"
          },
          {
            "constant": false,
            "id": 5609,
            "name": "contractCodeHash",
            "nodeType": "VariableDeclaration",
            "scope": 5901,
            "src": "183:32:35",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 5608,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "183:7:35",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 5621,
              "nodeType": "Block",
              "src": "241:109:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5619,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5612,
                      "name": "contractCodeHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5609,
                      "src": "247:16:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5615,
                                "name": "InitializableAdminUpgradeabilityProxy",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5386,
                                "src": "288:37:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_InitializableAdminUpgradeabilityProxy_$5386_$",
                                  "typeString": "type(contract InitializableAdminUpgradeabilityProxy)"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_type$_t_contract$_InitializableAdminUpgradeabilityProxy_$5386_$",
                                  "typeString": "type(contract InitializableAdminUpgradeabilityProxy)"
                                }
                              ],
                              "id": 5614,
                              "name": "type",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6000,
                              "src": "283:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_metatype_pure$_t_address_$returns$__$",
                                "typeString": "function (address) pure"
                              }
                            },
                            "id": 5616,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "283:43:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_meta_type_t_contract$_InitializableAdminUpgradeabilityProxy_$5386",
                              "typeString": "type(contract InitializableAdminUpgradeabilityProxy)"
                            }
                          },
                          "id": 5617,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "creationCode",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "283:56:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 5613,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5981,
                        "src": "266:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 5618,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "266:79:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "247:98:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 5620,
                  "nodeType": "ExpressionStatement",
                  "src": "247:98:35"
                }
              ]
            },
            "documentation": null,
            "id": 5622,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5610,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "231:2:35"
            },
            "returnParameters": {
              "id": 5611,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "241:0:35"
            },
            "scope": 5901,
            "src": "220:130:35",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5661,
              "nodeType": "Block",
              "src": "444:656:35",
              "statements": [
                {
                  "assignments": [
                    5632
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5632,
                      "name": "targetBytes",
                      "nodeType": "VariableDeclaration",
                      "scope": 5661,
                      "src": "588:19:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes20",
                        "typeString": "bytes20"
                      },
                      "typeName": {
                        "id": 5631,
                        "name": "bytes20",
                        "nodeType": "ElementaryTypeName",
                        "src": "588:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5636,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5634,
                        "name": "_logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5624,
                        "src": "618:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5633,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "610:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes20_$",
                        "typeString": "type(bytes20)"
                      },
                      "typeName": "bytes20"
                    },
                    "id": 5635,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "610:15:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes20",
                      "typeString": "bytes20"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "588:37:35"
                },
                {
                  "externalReferences": [
                    {
                      "proxy": {
                        "declaration": 5629,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "910:5:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "targetBytes": {
                        "declaration": 5632,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "792:11:35",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 5637,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let clone := mload(0x40)\n    mstore(clone, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n    mstore(add(clone, 0x14), targetBytes)\n    mstore(add(clone, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n    proxy := create(0, clone, 0x37)\n}",
                  "src": "631:330:35"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5640,
                            "name": "proxy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5629,
                            "src": "983:5:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 5639,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "975:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 5641,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "975:14:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5638,
                      "name": "ProxyCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5607,
                      "src": "962:12:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5642,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "962:28:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5643,
                  "nodeType": "EmitStatement",
                  "src": "957:33:35"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5647,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5644,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5626,
                        "src": "1000:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 5645,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1000:12:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 5646,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1015:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "1000:16:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5660,
                  "nodeType": "IfStatement",
                  "src": "997:95:35",
                  "trueBody": {
                    "id": 5659,
                    "nodeType": "Block",
                    "src": "1018:74:35",
                    "statements": [
                      {
                        "assignments": [
                          5649,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5649,
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "scope": 5659,
                            "src": "1027:12:35",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 5648,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "1027:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 5654,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5652,
                              "name": "_data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5626,
                              "src": "1055:5:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5650,
                              "name": "proxy",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5629,
                              "src": "1044:5:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 5651,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "call",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1044:10:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 5653,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1044:17:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1026:35:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5656,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5649,
                              "src": "1077:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 5655,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              5990,
                              5991
                            ],
                            "referencedDeclaration": 5990,
                            "src": "1069:7:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 5657,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1069:16:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5658,
                        "nodeType": "ExpressionStatement",
                        "src": "1069:16:35"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 5662,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deployMinimal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5627,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5624,
                  "name": "_logic",
                  "nodeType": "VariableDeclaration",
                  "scope": 5662,
                  "src": "377:14:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5623,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "377:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5626,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5662,
                  "src": "393:18:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5625,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "393:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "376:36:35"
            },
            "returnParameters": {
              "id": 5630,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5629,
                  "name": "proxy",
                  "nodeType": "VariableDeclaration",
                  "scope": 5662,
                  "src": "429:13:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5628,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "429:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "428:15:35"
            },
            "scope": 5901,
            "src": "354:746:35",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5684,
              "nodeType": "Block",
              "src": "1212:72:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5676,
                        "name": "_salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5664,
                        "src": "1238:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5677,
                        "name": "_logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5666,
                        "src": "1245:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5678,
                        "name": "_admin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5668,
                        "src": "1253:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5679,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5670,
                        "src": "1261:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5680,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5987,
                          "src": "1268:3:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5681,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1268:10:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 5675,
                      "name": "_deployProxy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5850,
                      "src": "1225:12:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_bytes_memory_ptr_$_t_address_$returns$_t_address_$",
                        "typeString": "function (uint256,address,address,bytes memory,address) returns (address)"
                      }
                    },
                    "id": 5682,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1225:54:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 5674,
                  "id": 5683,
                  "nodeType": "Return",
                  "src": "1218:61:35"
                }
              ]
            },
            "documentation": null,
            "id": 5685,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deploy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5671,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5664,
                  "name": "_salt",
                  "nodeType": "VariableDeclaration",
                  "scope": 5685,
                  "src": "1120:13:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5663,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1120:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5666,
                  "name": "_logic",
                  "nodeType": "VariableDeclaration",
                  "scope": 5685,
                  "src": "1135:14:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5665,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1135:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5668,
                  "name": "_admin",
                  "nodeType": "VariableDeclaration",
                  "scope": 5685,
                  "src": "1151:14:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5667,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1151:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5670,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5685,
                  "src": "1167:18:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5669,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1167:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1119:67:35"
            },
            "returnParameters": {
              "id": 5674,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5673,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5685,
                  "src": "1203:7:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5672,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1203:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1202:9:35"
            },
            "scope": 5901,
            "src": "1104:180:35",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5727,
              "nodeType": "Block",
              "src": "1427:198:35",
              "statements": [
                {
                  "assignments": [
                    5701
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5701,
                      "name": "signer",
                      "nodeType": "VariableDeclaration",
                      "scope": 5727,
                      "src": "1433:14:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 5700,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1433:7:35",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5709,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5703,
                        "name": "_salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5687,
                        "src": "1460:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5704,
                        "name": "_logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5689,
                        "src": "1467:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5705,
                        "name": "_admin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5691,
                        "src": "1475:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5706,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5693,
                        "src": "1483:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5707,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5695,
                        "src": "1490:10:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5702,
                      "name": "getSigner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5809,
                      "src": "1450:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_address_$_t_address_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (uint256,address,address,bytes memory,bytes memory) view returns (address)"
                      }
                    },
                    "id": 5708,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1450:51:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1433:68:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5715,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 5711,
                          "name": "signer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5701,
                          "src": "1515:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 5713,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1533:1:35",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 5712,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1525:7:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 5714,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1525:10:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "1515:20:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e76616c6964207369676e6174757265",
                        "id": 5716,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1537:19:35",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4f2d7dfcb27c0aafa13ae8c400de482c7832204d194018b6e45bd2bf244c74e7",
                          "typeString": "literal_string \"Invalid signature\""
                        },
                        "value": "Invalid signature"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4f2d7dfcb27c0aafa13ae8c400de482c7832204d194018b6e45bd2bf244c74e7",
                          "typeString": "literal_string \"Invalid signature\""
                        }
                      ],
                      "id": 5710,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5990,
                        5991
                      ],
                      "referencedDeclaration": 5991,
                      "src": "1507:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5717,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1507:50:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5718,
                  "nodeType": "ExpressionStatement",
                  "src": "1507:50:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5720,
                        "name": "_salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5687,
                        "src": "1583:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5721,
                        "name": "_logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5689,
                        "src": "1590:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5722,
                        "name": "_admin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5691,
                        "src": "1598:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5723,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5693,
                        "src": "1606:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5724,
                        "name": "signer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5701,
                        "src": "1613:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5719,
                      "name": "_deployProxy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5850,
                      "src": "1570:12:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_bytes_memory_ptr_$_t_address_$returns$_t_address_$",
                        "typeString": "function (uint256,address,address,bytes memory,address) returns (address)"
                      }
                    },
                    "id": 5725,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1570:50:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 5699,
                  "id": 5726,
                  "nodeType": "Return",
                  "src": "1563:57:35"
                }
              ]
            },
            "documentation": null,
            "id": 5728,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deploySigned",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5696,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5687,
                  "name": "_salt",
                  "nodeType": "VariableDeclaration",
                  "scope": 5728,
                  "src": "1310:13:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5686,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1310:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5689,
                  "name": "_logic",
                  "nodeType": "VariableDeclaration",
                  "scope": 5728,
                  "src": "1325:14:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5688,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1325:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5691,
                  "name": "_admin",
                  "nodeType": "VariableDeclaration",
                  "scope": 5728,
                  "src": "1341:14:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5690,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1341:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5693,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5728,
                  "src": "1357:18:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5692,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1357:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5695,
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 5728,
                  "src": "1377:23:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5694,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1377:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1309:92:35"
            },
            "returnParameters": {
              "id": 5699,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5698,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5728,
                  "src": "1418:7:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5697,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1418:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1417:9:35"
            },
            "scope": 5901,
            "src": "1288:337:35",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5768,
              "nodeType": "Block",
              "src": "1721:407:35",
              "statements": [
                {
                  "assignments": [
                    5738
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5738,
                      "name": "salt",
                      "nodeType": "VariableDeclaration",
                      "scope": 5768,
                      "src": "1877:12:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 5737,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1877:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5743,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5740,
                        "name": "_salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5730,
                        "src": "1901:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5741,
                        "name": "_sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5732,
                        "src": "1908:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5739,
                      "name": "_getSalt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5900,
                      "src": "1892:8:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (uint256,address) pure returns (bytes32)"
                      }
                    },
                    "id": 5742,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1892:24:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1877:39:35"
                },
                {
                  "assignments": [
                    5745
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5745,
                      "name": "rawAddress",
                      "nodeType": "VariableDeclaration",
                      "scope": 5768,
                      "src": "1922:18:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 5744,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1922:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5759,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30786666",
                                "id": 5750,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1993:4:35",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_255_by_1",
                                  "typeString": "int_const 255"
                                },
                                "value": "0xff"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_255_by_1",
                                  "typeString": "int_const 255"
                                }
                              ],
                              "id": 5749,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1986:6:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes1_$",
                                "typeString": "type(bytes1)"
                              },
                              "typeName": "bytes1"
                            },
                            "id": 5751,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1986:12:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5753,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6241,
                                "src": "2016:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ProxyFactory_$5901",
                                  "typeString": "contract ProxyFactory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ProxyFactory_$5901",
                                  "typeString": "contract ProxyFactory"
                                }
                              ],
                              "id": 5752,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2008:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 5754,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2008:13:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 5755,
                            "name": "salt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5738,
                            "src": "2031:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 5756,
                            "name": "contractCodeHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5609,
                            "src": "2045:16:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5747,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5974,
                            "src": "1960:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 5748,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1960:16:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 5757,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1960:109:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5746,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5981,
                      "src": "1943:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 5758,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1943:132:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1922:153:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "id": 5764,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 5762,
                              "name": "rawAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5745,
                              "src": "2105:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "3936",
                              "id": 5763,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2119:2:35",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_96_by_1",
                                "typeString": "int_const 96"
                              },
                              "value": "96"
                            },
                            "src": "2105:16:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 5761,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2097:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes20_$",
                            "typeString": "type(bytes20)"
                          },
                          "typeName": "bytes20"
                        },
                        "id": 5765,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2097:25:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      ],
                      "id": 5760,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2089:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 5766,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2089:34:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "functionReturnParameters": 5736,
                  "id": 5767,
                  "nodeType": "Return",
                  "src": "2082:41:35"
                }
              ]
            },
            "documentation": null,
            "id": 5769,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getDeploymentAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5733,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5730,
                  "name": "_salt",
                  "nodeType": "VariableDeclaration",
                  "scope": 5769,
                  "src": "1659:13:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5729,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1659:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5732,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 5769,
                  "src": "1674:15:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5731,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1674:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1658:32:35"
            },
            "returnParameters": {
              "id": 5736,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5735,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5769,
                  "src": "1712:7:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5734,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1712:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1711:9:35"
            },
            "scope": 5901,
            "src": "1629:499:35",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5808,
              "nodeType": "Block",
              "src": "2273:239:35",
              "statements": [
                {
                  "assignments": [
                    5785
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5785,
                      "name": "msgHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 5808,
                      "src": "2279:15:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 5784,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2279:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5801,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5791,
                                "name": "_salt",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5771,
                                "src": "2386:5:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5792,
                                "name": "_logic",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5773,
                                "src": "2393:6:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5793,
                                "name": "_admin",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5775,
                                "src": "2401:6:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5794,
                                "name": "_data",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5777,
                                "src": "2409:5:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5796,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6241,
                                    "src": "2424:4:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ProxyFactory_$5901",
                                      "typeString": "contract ProxyFactory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_ProxyFactory_$5901",
                                      "typeString": "contract ProxyFactory"
                                    }
                                  ],
                                  "id": 5795,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2416:7:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 5797,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2416:13:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 5789,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5974,
                                "src": "2358:3:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 5790,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "2358:16:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 5798,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2358:81:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 5788,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5981,
                          "src": "2339:9:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 5799,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2339:108:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5786,
                        "name": "ZOSLibECDSA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 868,
                        "src": "2297:11:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ZOSLibECDSA_$868_$",
                          "typeString": "type(library ZOSLibECDSA)"
                        }
                      },
                      "id": 5787,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "toEthSignedMessageHash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 867,
                      "src": "2297:34:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$",
                        "typeString": "function (bytes32) pure returns (bytes32)"
                      }
                    },
                    "id": 5800,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2297:156:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2279:174:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5804,
                        "name": "msgHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5785,
                        "src": "2487:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5805,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5779,
                        "src": "2496:10:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5802,
                        "name": "ZOSLibECDSA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 868,
                        "src": "2467:11:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ZOSLibECDSA_$868_$",
                          "typeString": "type(library ZOSLibECDSA)"
                        }
                      },
                      "id": 5803,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "recover",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 851,
                      "src": "2467:19:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (bytes32,bytes memory) pure returns (address)"
                      }
                    },
                    "id": 5806,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2467:40:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 5783,
                  "id": 5807,
                  "nodeType": "Return",
                  "src": "2460:47:35"
                }
              ]
            },
            "documentation": null,
            "id": 5809,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getSigner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5780,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5771,
                  "name": "_salt",
                  "nodeType": "VariableDeclaration",
                  "scope": 5809,
                  "src": "2151:13:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5770,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2151:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5773,
                  "name": "_logic",
                  "nodeType": "VariableDeclaration",
                  "scope": 5809,
                  "src": "2166:14:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5772,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2166:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5775,
                  "name": "_admin",
                  "nodeType": "VariableDeclaration",
                  "scope": 5809,
                  "src": "2182:14:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5774,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2182:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5777,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5809,
                  "src": "2198:18:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5776,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2198:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5779,
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 5809,
                  "src": "2218:23:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5778,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2218:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2150:92:35"
            },
            "returnParameters": {
              "id": 5783,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5782,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5809,
                  "src": "2264:7:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5781,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2264:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2263:9:35"
            },
            "scope": 5901,
            "src": "2132:380:35",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5849,
              "nodeType": "Block",
              "src": "2649:196:35",
              "statements": [
                {
                  "assignments": [
                    5825
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5825,
                      "name": "proxy",
                      "nodeType": "VariableDeclaration",
                      "scope": 5849,
                      "src": "2655:43:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$5386",
                        "typeString": "contract InitializableAdminUpgradeabilityProxy"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5824,
                        "name": "InitializableAdminUpgradeabilityProxy",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5386,
                        "src": "2655:37:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$5386",
                          "typeString": "contract InitializableAdminUpgradeabilityProxy"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5830,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5827,
                        "name": "_salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5811,
                        "src": "2714:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5828,
                        "name": "_sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5819,
                        "src": "2721:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5826,
                      "name": "_createProxy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5882,
                      "src": "2701:12:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$_t_contract$_InitializableAdminUpgradeabilityProxy_$5386_$",
                        "typeString": "function (uint256,address) returns (contract InitializableAdminUpgradeabilityProxy)"
                      }
                    },
                    "id": 5829,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2701:28:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$5386",
                      "typeString": "contract InitializableAdminUpgradeabilityProxy"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2655:74:35"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5833,
                            "name": "proxy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5825,
                            "src": "2761:5:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$5386",
                              "typeString": "contract InitializableAdminUpgradeabilityProxy"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$5386",
                              "typeString": "contract InitializableAdminUpgradeabilityProxy"
                            }
                          ],
                          "id": 5832,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2753:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 5834,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2753:14:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 5831,
                      "name": "ProxyCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5607,
                      "src": "2740:12:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5835,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2740:28:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5836,
                  "nodeType": "EmitStatement",
                  "src": "2735:33:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5840,
                        "name": "_logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5813,
                        "src": "2791:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5841,
                        "name": "_admin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5815,
                        "src": "2799:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5842,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5817,
                        "src": "2807:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5837,
                        "name": "proxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5825,
                        "src": "2774:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$5386",
                          "typeString": "contract InitializableAdminUpgradeabilityProxy"
                        }
                      },
                      "id": 5839,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5385,
                      "src": "2774:16:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$_t_address_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,bytes memory) payable external"
                      }
                    },
                    "id": 5843,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2774:39:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5844,
                  "nodeType": "ExpressionStatement",
                  "src": "2774:39:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5846,
                        "name": "proxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5825,
                        "src": "2834:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$5386",
                          "typeString": "contract InitializableAdminUpgradeabilityProxy"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$5386",
                          "typeString": "contract InitializableAdminUpgradeabilityProxy"
                        }
                      ],
                      "id": 5845,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2826:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 5847,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2826:14:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "functionReturnParameters": 5823,
                  "id": 5848,
                  "nodeType": "Return",
                  "src": "2819:21:35"
                }
              ]
            },
            "documentation": null,
            "id": 5850,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_deployProxy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5820,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5811,
                  "name": "_salt",
                  "nodeType": "VariableDeclaration",
                  "scope": 5850,
                  "src": "2538:13:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5810,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2538:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5813,
                  "name": "_logic",
                  "nodeType": "VariableDeclaration",
                  "scope": 5850,
                  "src": "2553:14:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5812,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2553:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5815,
                  "name": "_admin",
                  "nodeType": "VariableDeclaration",
                  "scope": 5850,
                  "src": "2569:14:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5814,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2569:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5817,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5850,
                  "src": "2585:18:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5816,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2585:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5819,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 5850,
                  "src": "2605:15:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5818,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2605:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2537:84:35"
            },
            "returnParameters": {
              "id": 5823,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5822,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5850,
                  "src": "2640:7:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5821,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2640:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2639:9:35"
            },
            "scope": 5901,
            "src": "2516:329:35",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5881,
              "nodeType": "Block",
              "src": "2960:364:35",
              "statements": [
                {
                  "assignments": [
                    5860
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5860,
                      "name": "addr",
                      "nodeType": "VariableDeclaration",
                      "scope": 5881,
                      "src": "2966:20:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      },
                      "typeName": {
                        "id": 5859,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2966:15:35",
                        "stateMutability": "payable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5861,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2966:20:35"
                },
                {
                  "assignments": [
                    5863
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5863,
                      "name": "code",
                      "nodeType": "VariableDeclaration",
                      "scope": 5881,
                      "src": "2992:17:35",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 5862,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2992:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5868,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5865,
                          "name": "InitializableAdminUpgradeabilityProxy",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5386,
                          "src": "3017:37:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_InitializableAdminUpgradeabilityProxy_$5386_$",
                            "typeString": "type(contract InitializableAdminUpgradeabilityProxy)"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_type$_t_contract$_InitializableAdminUpgradeabilityProxy_$5386_$",
                            "typeString": "type(contract InitializableAdminUpgradeabilityProxy)"
                          }
                        ],
                        "id": 5864,
                        "name": "type",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6000,
                        "src": "3012:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_metatype_pure$_t_address_$returns$__$",
                          "typeString": "function (address) pure"
                        }
                      },
                      "id": 5866,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3012:43:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_meta_type_t_contract$_InitializableAdminUpgradeabilityProxy_$5386",
                        "typeString": "type(contract InitializableAdminUpgradeabilityProxy)"
                      }
                    },
                    "id": 5867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "creationCode",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "3012:56:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2992:76:35"
                },
                {
                  "assignments": [
                    5870
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5870,
                      "name": "salt",
                      "nodeType": "VariableDeclaration",
                      "scope": 5881,
                      "src": "3074:12:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 5869,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "3074:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5875,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5872,
                        "name": "_salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5852,
                        "src": "3098:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5873,
                        "name": "_sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5854,
                        "src": "3105:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5871,
                      "name": "_getSalt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5900,
                      "src": "3089:8:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (uint256,address) pure returns (bytes32)"
                      }
                    },
                    "id": 5874,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3089:24:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3074:39:35"
                },
                {
                  "externalReferences": [
                    {
                      "addr": {
                        "declaration": 5860,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3137:4:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "code": {
                        "declaration": 5863,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3179:4:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 5860,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3220:4:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "code": {
                        "declaration": 5863,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3160:4:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "salt": {
                        "declaration": 5870,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3186:4:35",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 5876,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    addr := create2(0, add(code, 0x20), mload(code), salt)\n    if iszero(extcodesize(addr))\n    {\n        revert(0, 0)\n    }\n}",
                  "src": "3120:155:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5878,
                        "name": "addr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5860,
                        "src": "3314:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 5877,
                      "name": "InitializableAdminUpgradeabilityProxy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5386,
                      "src": "3276:37:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_InitializableAdminUpgradeabilityProxy_$5386_$",
                        "typeString": "type(contract InitializableAdminUpgradeabilityProxy)"
                      }
                    },
                    "id": 5879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3276:43:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$5386",
                      "typeString": "contract InitializableAdminUpgradeabilityProxy"
                    }
                  },
                  "functionReturnParameters": 5858,
                  "id": 5880,
                  "nodeType": "Return",
                  "src": "3269:50:35"
                }
              ]
            },
            "documentation": null,
            "id": 5882,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_createProxy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5855,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5852,
                  "name": "_salt",
                  "nodeType": "VariableDeclaration",
                  "scope": 5882,
                  "src": "2871:13:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5851,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2871:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5854,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 5882,
                  "src": "2886:15:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5853,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2886:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2870:32:35"
            },
            "returnParameters": {
              "id": 5858,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5857,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5882,
                  "src": "2921:37:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$5386",
                    "typeString": "contract InitializableAdminUpgradeabilityProxy"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5856,
                    "name": "InitializableAdminUpgradeabilityProxy",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5386,
                    "src": "2921:37:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$5386",
                      "typeString": "contract InitializableAdminUpgradeabilityProxy"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2920:39:35"
            },
            "scope": 5901,
            "src": "2849:475:35",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5899,
              "nodeType": "Block",
              "src": "3410:62:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5894,
                            "name": "_salt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5884,
                            "src": "3450:5:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 5895,
                            "name": "_sender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5886,
                            "src": "3457:7:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5892,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5974,
                            "src": "3433:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 5893,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3433:16:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 5896,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3433:32:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5891,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5981,
                      "src": "3423:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 5897,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3423:43:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 5890,
                  "id": 5898,
                  "nodeType": "Return",
                  "src": "3416:50:35"
                }
              ]
            },
            "documentation": null,
            "id": 5900,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getSalt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5887,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5884,
                  "name": "_salt",
                  "nodeType": "VariableDeclaration",
                  "scope": 5900,
                  "src": "3346:13:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5883,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3346:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5886,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 5900,
                  "src": "3361:15:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5885,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3361:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3345:32:35"
            },
            "returnParameters": {
              "id": 5890,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5889,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5900,
                  "src": "3401:7:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 5888,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3401:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3400:9:35"
            },
            "scope": 5901,
            "src": "3328:144:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 5902,
        "src": "116:3358:35"
      }
    ],
    "src": "0:3474:35"
  },
  "legacyAST": {
    "absolutePath": "/home/spalladino/Projects/sdk/zos/packages/lib/contracts/upgradeability/ProxyFactory.sol",
    "exportedSymbols": {
      "ProxyFactory": [
        5901
      ]
    },
    "id": 5902,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 5601,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".3"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:35"
      },
      {
        "absolutePath": "/home/spalladino/Projects/sdk/zos/packages/lib/contracts/upgradeability/InitializableAdminUpgradeabilityProxy.sol",
        "file": "./InitializableAdminUpgradeabilityProxy.sol",
        "id": 5602,
        "nodeType": "ImportDirective",
        "scope": 5902,
        "sourceUnit": 5387,
        "src": "25:53:35",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/spalladino/Projects/sdk/zos/packages/lib/contracts/cryptography/ECDSA.sol",
        "file": "../cryptography/ECDSA.sol",
        "id": 5603,
        "nodeType": "ImportDirective",
        "scope": 5902,
        "sourceUnit": 869,
        "src": "79:35:35",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [
          5386
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 5901,
        "linearizedBaseContracts": [
          5901
        ],
        "name": "ProxyFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": null,
            "id": 5607,
            "name": "ProxyCreated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5606,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5605,
                  "indexed": false,
                  "name": "proxy",
                  "nodeType": "VariableDeclaration",
                  "scope": 5607,
                  "src": "164:13:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5604,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "164:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "163:15:35"
            },
            "src": "145:34:35"
          },
          {
            "constant": false,
            "id": 5609,
            "name": "contractCodeHash",
            "nodeType": "VariableDeclaration",
            "scope": 5901,
            "src": "183:32:35",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 5608,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "183:7:35",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 5621,
              "nodeType": "Block",
              "src": "241:109:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5619,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5612,
                      "name": "contractCodeHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5609,
                      "src": "247:16:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5615,
                                "name": "InitializableAdminUpgradeabilityProxy",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5386,
                                "src": "288:37:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_InitializableAdminUpgradeabilityProxy_$5386_$",
                                  "typeString": "type(contract InitializableAdminUpgradeabilityProxy)"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_type$_t_contract$_InitializableAdminUpgradeabilityProxy_$5386_$",
                                  "typeString": "type(contract InitializableAdminUpgradeabilityProxy)"
                                }
                              ],
                              "id": 5614,
                              "name": "type",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6000,
                              "src": "283:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_metatype_pure$_t_address_$returns$__$",
                                "typeString": "function (address) pure"
                              }
                            },
                            "id": 5616,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "283:43:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_meta_type_t_contract$_InitializableAdminUpgradeabilityProxy_$5386",
                              "typeString": "type(contract InitializableAdminUpgradeabilityProxy)"
                            }
                          },
                          "id": 5617,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "creationCode",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "283:56:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 5613,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5981,
                        "src": "266:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 5618,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "266:79:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "247:98:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 5620,
                  "nodeType": "ExpressionStatement",
                  "src": "247:98:35"
                }
              ]
            },
            "documentation": null,
            "id": 5622,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5610,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "231:2:35"
            },
            "returnParameters": {
              "id": 5611,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "241:0:35"
            },
            "scope": 5901,
            "src": "220:130:35",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5661,
              "nodeType": "Block",
              "src": "444:656:35",
              "statements": [
                {
                  "assignments": [
                    5632
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5632,
                      "name": "targetBytes",
                      "nodeType": "VariableDeclaration",
                      "scope": 5661,
                      "src": "588:19:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes20",
                        "typeString": "bytes20"
                      },
                      "typeName": {
                        "id": 5631,
                        "name": "bytes20",
                        "nodeType": "ElementaryTypeName",
                        "src": "588:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5636,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5634,
                        "name": "_logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5624,
                        "src": "618:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5633,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "610:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes20_$",
                        "typeString": "type(bytes20)"
                      },
                      "typeName": "bytes20"
                    },
                    "id": 5635,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "610:15:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes20",
                      "typeString": "bytes20"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "588:37:35"
                },
                {
                  "externalReferences": [
                    {
                      "proxy": {
                        "declaration": 5629,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "910:5:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "targetBytes": {
                        "declaration": 5632,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "792:11:35",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 5637,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let clone := mload(0x40)\n    mstore(clone, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n    mstore(add(clone, 0x14), targetBytes)\n    mstore(add(clone, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n    proxy := create(0, clone, 0x37)\n}",
                  "src": "631:330:35"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5640,
                            "name": "proxy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5629,
                            "src": "983:5:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 5639,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "975:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 5641,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "975:14:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5638,
                      "name": "ProxyCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5607,
                      "src": "962:12:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5642,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "962:28:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5643,
                  "nodeType": "EmitStatement",
                  "src": "957:33:35"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5647,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 5644,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5626,
                        "src": "1000:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 5645,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1000:12:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 5646,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1015:1:35",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "1000:16:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5660,
                  "nodeType": "IfStatement",
                  "src": "997:95:35",
                  "trueBody": {
                    "id": 5659,
                    "nodeType": "Block",
                    "src": "1018:74:35",
                    "statements": [
                      {
                        "assignments": [
                          5649,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5649,
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "scope": 5659,
                            "src": "1027:12:35",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 5648,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "1027:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 5654,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5652,
                              "name": "_data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5626,
                              "src": "1055:5:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5650,
                              "name": "proxy",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5629,
                              "src": "1044:5:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 5651,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "call",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1044:10:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 5653,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1044:17:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1026:35:35"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5656,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5649,
                              "src": "1077:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 5655,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              5990,
                              5991
                            ],
                            "referencedDeclaration": 5990,
                            "src": "1069:7:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 5657,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1069:16:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5658,
                        "nodeType": "ExpressionStatement",
                        "src": "1069:16:35"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 5662,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deployMinimal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5627,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5624,
                  "name": "_logic",
                  "nodeType": "VariableDeclaration",
                  "scope": 5662,
                  "src": "377:14:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5623,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "377:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5626,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5662,
                  "src": "393:18:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5625,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "393:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "376:36:35"
            },
            "returnParameters": {
              "id": 5630,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5629,
                  "name": "proxy",
                  "nodeType": "VariableDeclaration",
                  "scope": 5662,
                  "src": "429:13:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5628,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "429:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "428:15:35"
            },
            "scope": 5901,
            "src": "354:746:35",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5684,
              "nodeType": "Block",
              "src": "1212:72:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5676,
                        "name": "_salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5664,
                        "src": "1238:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5677,
                        "name": "_logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5666,
                        "src": "1245:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5678,
                        "name": "_admin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5668,
                        "src": "1253:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5679,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5670,
                        "src": "1261:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5680,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5987,
                          "src": "1268:3:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5681,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1268:10:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 5675,
                      "name": "_deployProxy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5850,
                      "src": "1225:12:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_bytes_memory_ptr_$_t_address_$returns$_t_address_$",
                        "typeString": "function (uint256,address,address,bytes memory,address) returns (address)"
                      }
                    },
                    "id": 5682,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1225:54:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 5674,
                  "id": 5683,
                  "nodeType": "Return",
                  "src": "1218:61:35"
                }
              ]
            },
            "documentation": null,
            "id": 5685,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deploy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5671,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5664,
                  "name": "_salt",
                  "nodeType": "VariableDeclaration",
                  "scope": 5685,
                  "src": "1120:13:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5663,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1120:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5666,
                  "name": "_logic",
                  "nodeType": "VariableDeclaration",
                  "scope": 5685,
                  "src": "1135:14:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5665,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1135:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5668,
                  "name": "_admin",
                  "nodeType": "VariableDeclaration",
                  "scope": 5685,
                  "src": "1151:14:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5667,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1151:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5670,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5685,
                  "src": "1167:18:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5669,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1167:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1119:67:35"
            },
            "returnParameters": {
              "id": 5674,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5673,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5685,
                  "src": "1203:7:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5672,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1203:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1202:9:35"
            },
            "scope": 5901,
            "src": "1104:180:35",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5727,
              "nodeType": "Block",
              "src": "1427:198:35",
              "statements": [
                {
                  "assignments": [
                    5701
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5701,
                      "name": "signer",
                      "nodeType": "VariableDeclaration",
                      "scope": 5727,
                      "src": "1433:14:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 5700,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1433:7:35",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5709,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5703,
                        "name": "_salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5687,
                        "src": "1460:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5704,
                        "name": "_logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5689,
                        "src": "1467:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5705,
                        "name": "_admin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5691,
                        "src": "1475:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5706,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5693,
                        "src": "1483:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5707,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5695,
                        "src": "1490:10:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5702,
                      "name": "getSigner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5809,
                      "src": "1450:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_address_$_t_address_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (uint256,address,address,bytes memory,bytes memory) view returns (address)"
                      }
                    },
                    "id": 5708,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1450:51:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1433:68:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5715,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 5711,
                          "name": "signer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5701,
                          "src": "1515:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 5713,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1533:1:35",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 5712,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1525:7:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 5714,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1525:10:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "1515:20:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e76616c6964207369676e6174757265",
                        "id": 5716,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1537:19:35",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4f2d7dfcb27c0aafa13ae8c400de482c7832204d194018b6e45bd2bf244c74e7",
                          "typeString": "literal_string \"Invalid signature\""
                        },
                        "value": "Invalid signature"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4f2d7dfcb27c0aafa13ae8c400de482c7832204d194018b6e45bd2bf244c74e7",
                          "typeString": "literal_string \"Invalid signature\""
                        }
                      ],
                      "id": 5710,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5990,
                        5991
                      ],
                      "referencedDeclaration": 5991,
                      "src": "1507:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5717,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1507:50:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5718,
                  "nodeType": "ExpressionStatement",
                  "src": "1507:50:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5720,
                        "name": "_salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5687,
                        "src": "1583:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5721,
                        "name": "_logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5689,
                        "src": "1590:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5722,
                        "name": "_admin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5691,
                        "src": "1598:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5723,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5693,
                        "src": "1606:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5724,
                        "name": "signer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5701,
                        "src": "1613:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5719,
                      "name": "_deployProxy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5850,
                      "src": "1570:12:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_bytes_memory_ptr_$_t_address_$returns$_t_address_$",
                        "typeString": "function (uint256,address,address,bytes memory,address) returns (address)"
                      }
                    },
                    "id": 5725,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1570:50:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 5699,
                  "id": 5726,
                  "nodeType": "Return",
                  "src": "1563:57:35"
                }
              ]
            },
            "documentation": null,
            "id": 5728,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deploySigned",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5696,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5687,
                  "name": "_salt",
                  "nodeType": "VariableDeclaration",
                  "scope": 5728,
                  "src": "1310:13:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5686,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1310:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5689,
                  "name": "_logic",
                  "nodeType": "VariableDeclaration",
                  "scope": 5728,
                  "src": "1325:14:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5688,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1325:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5691,
                  "name": "_admin",
                  "nodeType": "VariableDeclaration",
                  "scope": 5728,
                  "src": "1341:14:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5690,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1341:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5693,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5728,
                  "src": "1357:18:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5692,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1357:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5695,
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 5728,
                  "src": "1377:23:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5694,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1377:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1309:92:35"
            },
            "returnParameters": {
              "id": 5699,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5698,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5728,
                  "src": "1418:7:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5697,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1418:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1417:9:35"
            },
            "scope": 5901,
            "src": "1288:337:35",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5768,
              "nodeType": "Block",
              "src": "1721:407:35",
              "statements": [
                {
                  "assignments": [
                    5738
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5738,
                      "name": "salt",
                      "nodeType": "VariableDeclaration",
                      "scope": 5768,
                      "src": "1877:12:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 5737,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1877:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5743,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5740,
                        "name": "_salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5730,
                        "src": "1901:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5741,
                        "name": "_sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5732,
                        "src": "1908:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5739,
                      "name": "_getSalt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5900,
                      "src": "1892:8:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (uint256,address) pure returns (bytes32)"
                      }
                    },
                    "id": 5742,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1892:24:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1877:39:35"
                },
                {
                  "assignments": [
                    5745
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5745,
                      "name": "rawAddress",
                      "nodeType": "VariableDeclaration",
                      "scope": 5768,
                      "src": "1922:18:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 5744,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1922:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5759,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30786666",
                                "id": 5750,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1993:4:35",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_255_by_1",
                                  "typeString": "int_const 255"
                                },
                                "value": "0xff"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_255_by_1",
                                  "typeString": "int_const 255"
                                }
                              ],
                              "id": 5749,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1986:6:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes1_$",
                                "typeString": "type(bytes1)"
                              },
                              "typeName": "bytes1"
                            },
                            "id": 5751,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1986:12:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5753,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6241,
                                "src": "2016:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ProxyFactory_$5901",
                                  "typeString": "contract ProxyFactory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ProxyFactory_$5901",
                                  "typeString": "contract ProxyFactory"
                                }
                              ],
                              "id": 5752,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2008:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 5754,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2008:13:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 5755,
                            "name": "salt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5738,
                            "src": "2031:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 5756,
                            "name": "contractCodeHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5609,
                            "src": "2045:16:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5747,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5974,
                            "src": "1960:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 5748,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1960:16:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 5757,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1960:109:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5746,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5981,
                      "src": "1943:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 5758,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1943:132:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1922:153:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "id": 5764,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 5762,
                              "name": "rawAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5745,
                              "src": "2105:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "3936",
                              "id": 5763,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2119:2:35",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_96_by_1",
                                "typeString": "int_const 96"
                              },
                              "value": "96"
                            },
                            "src": "2105:16:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 5761,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2097:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes20_$",
                            "typeString": "type(bytes20)"
                          },
                          "typeName": "bytes20"
                        },
                        "id": 5765,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2097:25:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      ],
                      "id": 5760,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2089:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 5766,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2089:34:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "functionReturnParameters": 5736,
                  "id": 5767,
                  "nodeType": "Return",
                  "src": "2082:41:35"
                }
              ]
            },
            "documentation": null,
            "id": 5769,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getDeploymentAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5733,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5730,
                  "name": "_salt",
                  "nodeType": "VariableDeclaration",
                  "scope": 5769,
                  "src": "1659:13:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5729,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1659:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5732,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 5769,
                  "src": "1674:15:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5731,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1674:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1658:32:35"
            },
            "returnParameters": {
              "id": 5736,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5735,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5769,
                  "src": "1712:7:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5734,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1712:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1711:9:35"
            },
            "scope": 5901,
            "src": "1629:499:35",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5808,
              "nodeType": "Block",
              "src": "2273:239:35",
              "statements": [
                {
                  "assignments": [
                    5785
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5785,
                      "name": "msgHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 5808,
                      "src": "2279:15:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 5784,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2279:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5801,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5791,
                                "name": "_salt",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5771,
                                "src": "2386:5:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5792,
                                "name": "_logic",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5773,
                                "src": "2393:6:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5793,
                                "name": "_admin",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5775,
                                "src": "2401:6:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5794,
                                "name": "_data",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5777,
                                "src": "2409:5:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5796,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6241,
                                    "src": "2424:4:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ProxyFactory_$5901",
                                      "typeString": "contract ProxyFactory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_ProxyFactory_$5901",
                                      "typeString": "contract ProxyFactory"
                                    }
                                  ],
                                  "id": 5795,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2416:7:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 5797,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2416:13:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 5789,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5974,
                                "src": "2358:3:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 5790,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "2358:16:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 5798,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2358:81:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 5788,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5981,
                          "src": "2339:9:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 5799,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2339:108:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5786,
                        "name": "ZOSLibECDSA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 868,
                        "src": "2297:11:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ZOSLibECDSA_$868_$",
                          "typeString": "type(library ZOSLibECDSA)"
                        }
                      },
                      "id": 5787,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "toEthSignedMessageHash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 867,
                      "src": "2297:34:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$",
                        "typeString": "function (bytes32) pure returns (bytes32)"
                      }
                    },
                    "id": 5800,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2297:156:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2279:174:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5804,
                        "name": "msgHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5785,
                        "src": "2487:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5805,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5779,
                        "src": "2496:10:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5802,
                        "name": "ZOSLibECDSA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 868,
                        "src": "2467:11:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ZOSLibECDSA_$868_$",
                          "typeString": "type(library ZOSLibECDSA)"
                        }
                      },
                      "id": 5803,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "recover",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 851,
                      "src": "2467:19:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (bytes32,bytes memory) pure returns (address)"
                      }
                    },
                    "id": 5806,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2467:40:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 5783,
                  "id": 5807,
                  "nodeType": "Return",
                  "src": "2460:47:35"
                }
              ]
            },
            "documentation": null,
            "id": 5809,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getSigner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5780,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5771,
                  "name": "_salt",
                  "nodeType": "VariableDeclaration",
                  "scope": 5809,
                  "src": "2151:13:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5770,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2151:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5773,
                  "name": "_logic",
                  "nodeType": "VariableDeclaration",
                  "scope": 5809,
                  "src": "2166:14:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5772,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2166:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5775,
                  "name": "_admin",
                  "nodeType": "VariableDeclaration",
                  "scope": 5809,
                  "src": "2182:14:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5774,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2182:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5777,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5809,
                  "src": "2198:18:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5776,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2198:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5779,
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 5809,
                  "src": "2218:23:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5778,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2218:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2150:92:35"
            },
            "returnParameters": {
              "id": 5783,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5782,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5809,
                  "src": "2264:7:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5781,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2264:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2263:9:35"
            },
            "scope": 5901,
            "src": "2132:380:35",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5849,
              "nodeType": "Block",
              "src": "2649:196:35",
              "statements": [
                {
                  "assignments": [
                    5825
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5825,
                      "name": "proxy",
                      "nodeType": "VariableDeclaration",
                      "scope": 5849,
                      "src": "2655:43:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$5386",
                        "typeString": "contract InitializableAdminUpgradeabilityProxy"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5824,
                        "name": "InitializableAdminUpgradeabilityProxy",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5386,
                        "src": "2655:37:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$5386",
                          "typeString": "contract InitializableAdminUpgradeabilityProxy"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5830,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5827,
                        "name": "_salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5811,
                        "src": "2714:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5828,
                        "name": "_sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5819,
                        "src": "2721:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5826,
                      "name": "_createProxy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5882,
                      "src": "2701:12:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$_t_contract$_InitializableAdminUpgradeabilityProxy_$5386_$",
                        "typeString": "function (uint256,address) returns (contract InitializableAdminUpgradeabilityProxy)"
                      }
                    },
                    "id": 5829,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2701:28:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$5386",
                      "typeString": "contract InitializableAdminUpgradeabilityProxy"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2655:74:35"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5833,
                            "name": "proxy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5825,
                            "src": "2761:5:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$5386",
                              "typeString": "contract InitializableAdminUpgradeabilityProxy"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$5386",
                              "typeString": "contract InitializableAdminUpgradeabilityProxy"
                            }
                          ],
                          "id": 5832,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2753:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 5834,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2753:14:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 5831,
                      "name": "ProxyCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5607,
                      "src": "2740:12:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5835,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2740:28:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5836,
                  "nodeType": "EmitStatement",
                  "src": "2735:33:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5840,
                        "name": "_logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5813,
                        "src": "2791:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5841,
                        "name": "_admin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5815,
                        "src": "2799:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5842,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5817,
                        "src": "2807:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5837,
                        "name": "proxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5825,
                        "src": "2774:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$5386",
                          "typeString": "contract InitializableAdminUpgradeabilityProxy"
                        }
                      },
                      "id": 5839,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5385,
                      "src": "2774:16:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$_t_address_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,bytes memory) payable external"
                      }
                    },
                    "id": 5843,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2774:39:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5844,
                  "nodeType": "ExpressionStatement",
                  "src": "2774:39:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5846,
                        "name": "proxy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5825,
                        "src": "2834:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$5386",
                          "typeString": "contract InitializableAdminUpgradeabilityProxy"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$5386",
                          "typeString": "contract InitializableAdminUpgradeabilityProxy"
                        }
                      ],
                      "id": 5845,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2826:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 5847,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2826:14:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "functionReturnParameters": 5823,
                  "id": 5848,
                  "nodeType": "Return",
                  "src": "2819:21:35"
                }
              ]
            },
            "documentation": null,
            "id": 5850,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_deployProxy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5820,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5811,
                  "name": "_salt",
                  "nodeType": "VariableDeclaration",
                  "scope": 5850,
                  "src": "2538:13:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5810,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2538:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5813,
                  "name": "_logic",
                  "nodeType": "VariableDeclaration",
                  "scope": 5850,
                  "src": "2553:14:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5812,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2553:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5815,
                  "name": "_admin",
                  "nodeType": "VariableDeclaration",
                  "scope": 5850,
                  "src": "2569:14:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5814,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2569:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5817,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5850,
                  "src": "2585:18:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5816,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2585:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5819,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 5850,
                  "src": "2605:15:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5818,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2605:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2537:84:35"
            },
            "returnParameters": {
              "id": 5823,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5822,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5850,
                  "src": "2640:7:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5821,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2640:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2639:9:35"
            },
            "scope": 5901,
            "src": "2516:329:35",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5881,
              "nodeType": "Block",
              "src": "2960:364:35",
              "statements": [
                {
                  "assignments": [
                    5860
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5860,
                      "name": "addr",
                      "nodeType": "VariableDeclaration",
                      "scope": 5881,
                      "src": "2966:20:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      },
                      "typeName": {
                        "id": 5859,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2966:15:35",
                        "stateMutability": "payable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5861,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2966:20:35"
                },
                {
                  "assignments": [
                    5863
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5863,
                      "name": "code",
                      "nodeType": "VariableDeclaration",
                      "scope": 5881,
                      "src": "2992:17:35",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 5862,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2992:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5868,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5865,
                          "name": "InitializableAdminUpgradeabilityProxy",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5386,
                          "src": "3017:37:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_InitializableAdminUpgradeabilityProxy_$5386_$",
                            "typeString": "type(contract InitializableAdminUpgradeabilityProxy)"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_type$_t_contract$_InitializableAdminUpgradeabilityProxy_$5386_$",
                            "typeString": "type(contract InitializableAdminUpgradeabilityProxy)"
                          }
                        ],
                        "id": 5864,
                        "name": "type",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6000,
                        "src": "3012:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_metatype_pure$_t_address_$returns$__$",
                          "typeString": "function (address) pure"
                        }
                      },
                      "id": 5866,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3012:43:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_meta_type_t_contract$_InitializableAdminUpgradeabilityProxy_$5386",
                        "typeString": "type(contract InitializableAdminUpgradeabilityProxy)"
                      }
                    },
                    "id": 5867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "creationCode",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "3012:56:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2992:76:35"
                },
                {
                  "assignments": [
                    5870
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5870,
                      "name": "salt",
                      "nodeType": "VariableDeclaration",
                      "scope": 5881,
                      "src": "3074:12:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 5869,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "3074:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5875,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5872,
                        "name": "_salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5852,
                        "src": "3098:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5873,
                        "name": "_sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5854,
                        "src": "3105:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5871,
                      "name": "_getSalt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5900,
                      "src": "3089:8:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (uint256,address) pure returns (bytes32)"
                      }
                    },
                    "id": 5874,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3089:24:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3074:39:35"
                },
                {
                  "externalReferences": [
                    {
                      "addr": {
                        "declaration": 5860,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3137:4:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "code": {
                        "declaration": 5863,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3179:4:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 5860,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3220:4:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "code": {
                        "declaration": 5863,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3160:4:35",
                        "valueSize": 1
                      }
                    },
                    {
                      "salt": {
                        "declaration": 5870,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3186:4:35",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 5876,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    addr := create2(0, add(code, 0x20), mload(code), salt)\n    if iszero(extcodesize(addr))\n    {\n        revert(0, 0)\n    }\n}",
                  "src": "3120:155:35"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5878,
                        "name": "addr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5860,
                        "src": "3314:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 5877,
                      "name": "InitializableAdminUpgradeabilityProxy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5386,
                      "src": "3276:37:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_InitializableAdminUpgradeabilityProxy_$5386_$",
                        "typeString": "type(contract InitializableAdminUpgradeabilityProxy)"
                      }
                    },
                    "id": 5879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3276:43:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$5386",
                      "typeString": "contract InitializableAdminUpgradeabilityProxy"
                    }
                  },
                  "functionReturnParameters": 5858,
                  "id": 5880,
                  "nodeType": "Return",
                  "src": "3269:50:35"
                }
              ]
            },
            "documentation": null,
            "id": 5882,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_createProxy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5855,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5852,
                  "name": "_salt",
                  "nodeType": "VariableDeclaration",
                  "scope": 5882,
                  "src": "2871:13:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5851,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2871:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5854,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 5882,
                  "src": "2886:15:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5853,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2886:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2870:32:35"
            },
            "returnParameters": {
              "id": 5858,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5857,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5882,
                  "src": "2921:37:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$5386",
                    "typeString": "contract InitializableAdminUpgradeabilityProxy"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5856,
                    "name": "InitializableAdminUpgradeabilityProxy",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5386,
                    "src": "2921:37:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InitializableAdminUpgradeabilityProxy_$5386",
                      "typeString": "contract InitializableAdminUpgradeabilityProxy"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2920:39:35"
            },
            "scope": 5901,
            "src": "2849:475:35",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5899,
              "nodeType": "Block",
              "src": "3410:62:35",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5894,
                            "name": "_salt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5884,
                            "src": "3450:5:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 5895,
                            "name": "_sender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5886,
                            "src": "3457:7:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5892,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5974,
                            "src": "3433:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 5893,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3433:16:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 5896,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3433:32:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5891,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5981,
                      "src": "3423:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 5897,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3423:43:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 5890,
                  "id": 5898,
                  "nodeType": "Return",
                  "src": "3416:50:35"
                }
              ]
            },
            "documentation": null,
            "id": 5900,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getSalt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5887,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5884,
                  "name": "_salt",
                  "nodeType": "VariableDeclaration",
                  "scope": 5900,
                  "src": "3346:13:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5883,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3346:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5886,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 5900,
                  "src": "3361:15:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5885,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3361:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3345:32:35"
            },
            "returnParameters": {
              "id": 5890,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5889,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5900,
                  "src": "3401:7:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 5888,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3401:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3400:9:35"
            },
            "scope": 5901,
            "src": "3328:144:35",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 5902,
        "src": "116:3358:35"
      }
    ],
    "src": "0:3474:35"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.3+commit.10d17f24.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.2",
  "updatedAt": "2020-02-20T14:02:47.781Z",
  "devdoc": {
    "methods": {}
  },
  "userdoc": {
    "methods": {}
  }
}