HISE Logo Forum
    • Categories
    • Register
    • Login

    How do you change the 'SaveInPreset' by using code

    Scheduled Pinned Locked Moved General Questions
    16 Posts 5 Posters 742 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • L
      LeeC @d.healey
      last edited by LeeC

      @d-healey Disabling it completely was the initial approach.
      But then I had an ambitious thought to create the following funtionality.

      A. Allow a user to load pre-defined arp patterns that are coupled with sounds in the preset menu.

      B. Allow a user to then decouple and lock the arp patterns in place, whilst continuing to change the sounds via the preset menu.

      So in a nutshell, the user flicks through the preset menu and thinks "I love that arpeggiator pattern but hate the sound...." they then lock the pattern they love in place and then continue to flick through the sounds etc

      Hope that makes sense.

      Appreciate your time either way ☺

      d.healeyD 1 Reply Last reply Reply Quote 0
      • d.healeyD
        d.healey @LeeC
        last edited by

        @LeeC My initial thought is to duplicate the controls, have one set that has saveInPreset set to true and is visible on initial load, and another set that has saveInPreset set to false. When the instrument first opens you set both sets of controls to have the same values.

        When the user loads a preset you can check the status of the lock button. If it's locked then you show the controls with saveInPreset set to false which should contain the previous settings.

        There might be a better way but that's the first thing that came to mind. Try your method too and see if you can change the saveInPreset state on the fly. You need to provide a string as the first parameter to the set function. So it will be something like myControl.set("property", value);

        Libre Wave - Freedom respecting instruments and effects
        My Patreon - HISE tutorials
        YouTube Channel - Public HISE tutorials

        L 2 Replies Last reply Reply Quote 1
        • L
          LeeC @d.healey
          last edited by

          @d-healey Yeah I'm struggling to control the 'saveInPreset' value on the fly but really like the solution that you've come up with. Would never have looked at it that way!

          How do you check the status of the lock button when the user loads a preset?

          Is there an 'engine' function that can be used or something.

          Thanks again ☺

          d.healeyD 1 Reply Last reply Reply Quote 0
          • d.healeyD
            d.healey @LeeC
            last edited by

            @LeeC Put if (lockbutton.getValue() == 1); in the control callback of one of the controls that has saveInPreset set to true.

            Libre Wave - Freedom respecting instruments and effects
            My Patreon - HISE tutorials
            YouTube Channel - Public HISE tutorials

            1 Reply Last reply Reply Quote 1
            • L
              LeeC @d.healey
              last edited by

              @d-healey I've had a go at this but I've hit a dead end trying to figure this out ☹

              Was excited to try the 'duplicate controls' method that you mentioned but couldn't get the two slider pack arpeggiator controls to work independently using a 'lock button' as the slider pack that has savedInPreset disabled will always reflect the current state of the arp.

              If you could take a quick look at this code snippet I would be eternally grateful. You've helped out this community massively and we always appreciate you time.

              Thanks

              HiseSnippet 1639.3oc4XsraabCEkikYPjRThcPPetYfQQgMZhfjyi9HHHRxRNP0uTsbbypFLZFJIBOhbxLbbrZP.5GPWzOg9Kz+frua5eP+E7xhtw8RNijnrdjwpMAEsyBAMWx68b3kWd3PV2maSBB39HizGzyifLtJtQOlnyFcrnLTsJHiqfK46sM29Hy0Qk64YEDPbPFFodrrCFoWDodN8QksbsX1jglPnC4Tax1ztTwPq0KtE00cSKGxAztZ89tEqYyYavc4g.YRgyi7rrOxpMYWKY2V.iLtTUGpf62PXIHAHiEKyc50nC+Ern9eHMf1zkHeo.pADnHyaxccjLVZEsQGpqS89C5.Dx.WeXJHUTJ3l3cnNzA1GlJVR0f4POzyGFKLK5UPmd4SN8VPidKFQukwMr8odhgsDMMUiIH9srfo.cZE0WzB+tAdCNzClHWWqiHa5CuLviUue972x7d4yu1CxlIaFXhHPXdrkuYCWpCwuNLSTv7gl8CPahXCdWONCdY0Uz5yJR+G5sKT0zLTH3ro57vtrxZYxPYtTFwrUHyVPAu3LsfKCfO2cUVX2lD+aAH3FRVKyKylwDdnsLWcXvjnbnr8UWy7gOzrvZOP0I0Op+7pLYzBct.IoTgeCKW2lfsUmD1q8.MpsKWP1isJvfLog3Yd9lZ0ZhsEGJWh+DaVtpveVNN13OpiP4wn0e3oW+ou7vNZZQqibVMFUrmGgMspRT7bor9LlU.7BU04MhqNGl7PTnPLKVKahTTWW7vwRXgL9Xbg6mCdNtzF4x0pbE3ueSc3GQoRQXp.JUDPWKFnxpIbEHWEOrB37X.OOoVEILvphX9CiIOhufJSWFUHGCpUQKwRiqPBNRv8.QmAEqvZLQr9PDxa5xsDTV6CnPZUh+0w5lJfNY.7+v1E6oykXBDg10AMHBTAV1m+h.hOpY69xfouDz2+P5.UP5Nz5ub1Oc1nVWWZ9We8YJypgowOiUKMVQN01v5XRThZkuxT3GRt0flTBP9SoQYgbvXVkEZQNLdaaZcL2G3kTMejF2MTR0vtJetS1LuB8BpinCTnZ7mFHTGBscGg7MrgJAMHqiu.EVCy3nc0x3u1qnW+52ZNxZGXOMR61TKXASgQP6RIFs00meOVCskd9LQK.lKpwhlxkJzSXrlMF8ssZRbU.eYr5+pQH136.T5I+yOB4JA4DvyOD2nzgUqTa256WsQ0CLusY0cKUd6pUPWj3qOlL+dswzomTLBmOZLbpTqwTA5MsHcHZ48zmudYLZYwpu7H1cz36UmUO2p1H7bY6Q1hN0nRjoRlD4LE.WNA5RWCGwhxSSYJAwHKdekFwEMDQ0qwxSvZvFBhWrsyEjkJljfbErLBJtLerXIU.ZbDcJz3zGkjzADEtuXKRuf+NYDXv3QHNaw3MOe.9zwyFKEG.nLuIuL+DUH.gBxyCIvW9NvbxGPZTIKdOaAnLruEqMY9FMowM5D1pk6Lce1aSCasQ5RO.VDq0vXQ6hra8aBuCIfb.UzKw305yJWJWtubK.u6DVO58Di2MvaSXsEcRNZGIQ6vuFP6o75QuiRVkwxX3jCLFwsAwkXKkmdyEFSLPuOduPgWn3envsLdm5UAIP+9AbrTPBK8utLPUYNSIL4KhF+vKvQn3NgtRsY8yUIOLYbCvG6Nhns7PJr.nBQej9V4vVIktKiqSE1clLeWXB7U9cxuk46fsCq1pETcLjrKh27ou8OmpNUtVDU.sU3rbpKSPQj2S8t42BZblOlvH9iu+7nWovukzqTvKwWoPjD6A9Vr.OdvHAtutWftwmD.GTl778kyxi946V9SroSezlvfbh9zvRD5qJWJ0kGxDiTdjJwyIWfq1Xw+Ue0Fu6DGRkL5NgLnQ8wteLPIj10ykTkcLryEXQxwa.mWrkUnqnu0Qqq2gy3dc3Lps9j99DgOscahuN2m3.pjPH2oZfkaVbeXO.K8B3Oo31PgmkOjmHyYtnPxyEyZ95CvQz0TtXz7+Fh5o9+on997P4kYriETnJO2o73CfVJ7otQ63KukIiEj5gQumGEc3cPLk4nd4L3ItwBx2MharP+FemfQWKae9yri9lFYs7kUVfwMSc4xow6He2bvESgw4ykG0ETDelssLceaH+LYeVeN74NygO2cN74dygO2eN74ymCe9hY5ibynRgBd2nkhfg5UitUKipLKnRVU0i9KGaimXA
              
              1 Reply Last reply Reply Quote 0
              • L
                LeeC
                last edited by

                I've probably misinterpreted your method to be honest.... Would be ace if you could steer me in the right direction.

                Assuming this is all possible to do in HISE that is ☺

                1 Reply Last reply Reply Quote 0
                • d.healeyD
                  d.healey
                  last edited by d.healey

                  Ok I played around with it and had to make a few changes to my initial idea, but it works.

                  Firstly the lock button needs to have saveInPreset disabled, otherwise it will reset to however the preset was saved and then it's not going to work.

                  I've never used the arpeggiator before so I didn't realise the sliderpack connected to it via processor ID. A control can't have both a callback function and be connect by processor ID, it's one or the other. So I removed the processor ID on sliderpack2 but kept it on sliderpack1.

                  So now sliderpack1 controls the arpeggiator and sliderpack2 controls sliderpack1. This means we can hide sliderpack1 all the time, we never need to see it.

                  When you make a change to sliderpack2 it will be passed on to sliderpack1 through the control callback.

                  Now the last piece of the puzzle. We need a control that has saveInPreset enabled so that when the preset is changed we can check the lock status and update sliderpack1 or sliderpack2 as needed. For this I added a new button called btnTrigger. You don't have to do it with this control, if you have another control that is more suitable you can use that, you could also do it in a timer but I prefer using control callbacks.

                  HiseSnippet 1907.3oc4YszbabbDdWBNxBvFRjpbE+HWlhUpT.kjAAnrUjeUBfjf1HhjBEAMku4ZwtC.lh6NypcmkOrhq3eB4mfuje.4efpbMWxOEcLWRI2yLK.F7fPKgeUUxd.E2dlt+9lt6omYa1Nh6Rhi4QV14O9xPhk8ag5bISLXmANTlUqcsreSTinv84tmh2xZ6KCchiIdV1149B4Dryupkk02+ee5e+Qa636vbIohTOmvotj8oATwXosq+Xpu+dNdjioAFy9Cq2xky1g6yS.xjCU0Jzw8Tm9jCcjSaEjk8MZ5QE7nNBGAI1xd0s4dW1Y.+bld9mPioc8IxWpY0ALjV7dbeOIikRs1Y.02q8vEcrkkMp8XWPNsK3sQGP8nijO1UrlZ.7XML8G1qrH5U60SupyidqXPuU0zacTG2HZnX7H5vTKlfD0yABAlzROWqU9mqh1gCyfIpD3bJYuH3kQZT5AUqdO7GUsZ4OsXghEf.Qr.elSDtiO0iD0FhD0veNdnA5SD6vCB4L3kRaXLmMj5OOs2JCZu0TZ6C4bcSDBN6JUd7T1nLvaJymxH3dILWAETiyLrtzBQb+RtCU+d.J9IjxEK77hEvvSOdDtDE.q5mho3OCOZlRTOLIPar3Rkggu6cKqUJUW4iginRLQnesA3k8HWThduIsmdzSjLngnDsrbsKMx2Urv2oBBYvcIQIcYsiiueWPZo4sl0Q0hE1byiin86Sh.pnF.KF3HvmCaHwQIL74CHLbXDALKlFicG3v5S7lmesqfkZpE6VyS6gKMNJIWLpkboxkwatYqdpfrDKByA1b.XkeRO4VURYgzqu4llYTfVhADbWdbLnFwOlLoI8nwo1bp3zlad.rC.GqrUnxVANB2AFRpMd1SmUXxsEjWLElSuplW9gY9yBxPTYIYIWYbP5pRUlILJwvHLeHWPdBqT4BOuP9B.lSOTudycrTi4Shl6vxB+QKRwRrjftjngYRCmHTAbxRrnrUh0U6cLlHm0hQEOIjvtpyErRcoxRvorBfWnJ.emzBviiWVTnVaQjQ.zRQciCCq64Hbrr+8nZOnh7owNvOM2G9431vOeYiczXp.JmFnakBz1pMOJPdKz3X1LXXY8Us1UBCT3Ok+vZJjDInR2k8tjyfCj0mhjGsKI9TAOzx9MFky.GiHROBTi7d9bGAk0+XJ3Vk3eajonZVWLB9ue+5WZxkTBnQ61vwrxxJaGwOOFXd29COoO+Mf49ejJPEjfwR+Gu5u8pIktkT7+5EuRIVsLs+AjZK1FxPaGmyHZG0FeBVDkPt2ngTmwFcECJSjimQpLQSqvrismyY7HfWxKrLwfPs.fpIAJctOr4z5bpmXvHuxO7WqOfP6OX70gZGV2xv6eiqQB1XOu0gFd9WDVObXdbKOYNDb8MR+9TGXiCjVNbKhcNSfuYlAdKyP9YF.u1ypGCgfVLcjVhftdZi.dBy3FfqUOXzMGgmG9h.Gi0xCmvgfz7pXJu12oKwWQoahT+8DIfO0zMbQcA4BvBuGpSiSZtaqCaeTyNMOF+A3lG1X68atq00AGyUM9aMv4kCw48mAmca0YVftwB1YO9bRCzpFZtpddJZEQpajmp9z9cS.WMakRLh.erAfs+K0sl8BxEMyoT29bprrItWbtIKZmKaEsWXI40yPkxagzrHUzr0JyfMJhNRU055ZB81kzBlxaHHHgoxlxHqUOKF4MQRKn3xxwh0TFnyozqfFu7QYwc.VgGIdL4x3eJdDXwDRHdOlw6NsA9iy5MVK0.PJcW917KTl.pSQdVBA9byQhy9BxfJEQOwU.adNRdEyka0jG0YPRud9KT8EewA3vVR.8XXCqw.yXsqy8Gdc3cBAp0PEWlY75c2saToxG+3cqT49Is0umY7tCZeBquXP1Q6TIZm7mAz9Zda86VYKyXcD745LFwuCwm3JKO85SLlqgdGzSRDgIhelL25nCZ2DJAFMzfydAwrYnaKMTSl2UXlpSTuNsiAqgNf6k3KqMa1LCYGbRG.t98DEskcFfECYHlqzqQGNpl4FvjU5tNpME9Fs4y2UlCek2b+WX9N53vl85AYGiI6pn895ks4PKGUtklJPsU3K0UcvSQjem5c7SgZb3ufvHQyd9rQe7fm+cV6iWXl6imtD6wQNr3Pd7DFdXcuXSgeULYuHxyNRFkm7CJbhl6Pu7Q6AKx4pSGGQRjJcY5agBoG49kngcq9aP+D+4e21O8hC4xFcmiGzt8LMkFpDRCB8IMYmAmbARjb7NvWv1yIwWLT5j40GvY7vAbF00LneDQjdiWCtO2ETCgPdR0HIuc8ify.bLSf+C02GR7bh.+DYI8E0xtuXQwq2EooKVtYD++FE0y8+mE0OhmHauxANPhJ7UYpOe.pkBW0UehuruW1qHqGpeup7ccwTlm5kWAOoCVS9tc5f0FN3uJXD33Fw+lzFMKykuoRBrtYp+iN4QGHeGOpUYHT0JUsBfJheiqqzc+Af+Y95r0Rny8WBc9vkPmOZIz4AKgN+okPmGtPcjGF0HQvCzaEAAsap6ylcSc64UMW3GA33xj9F
                  

                  Libre Wave - Freedom respecting instruments and effects
                  My Patreon - HISE tutorials
                  YouTube Channel - Public HISE tutorials

                  1 Reply Last reply Reply Quote 1
                  • Christoph HartC
                    Christoph Hart
                    last edited by

                    I would recommend a totally different approach: having a second (hidden) UI element is rather weird.

                    Just take a copy of the current values when you press the lock button and restore this array in the slider pack' callback:

                    HiseSnippet 1847.3ocsX0sbaTCEVaRDPbvsIcfgKfKD4FblVL1sPggxOt4OvsMsdpSCkggoi7tx1hrVZQq1j5goyvvS.uC7Dva.2yKCWxckij1+bsiqSlhuHSzQme9NGcNGcV0QI8YwwRExa0CGGwPduIt6Xgd3NCobAp8tHuKgOfFqYJhiz1iinwwr.jm2xeigf2pqfr+9mudaZHU3yJHgPGI49r6wGw0ET6z5t7vv8oArC4iJw8G2psuTriLTl.3YYbCTD0+X5.18oF1VBi7ds8B3ZopqlpYw.OaKCF2cn7Tgi+i3w7dgLyhlntfhbjQ6LjGFzIyWiQHuU5T34K6772Be.OfmSuHBrtcCRgDkiAdKMIjVYBH07rfz9xv.iBNC3sTI3shCdaf65q3Q5hcLXaMbaAb3zmBg8xvxwKZo5uNdGIvgPWeD8X19JXQtD0tYiFWi7IMZr0spVoZkO5iHGNjGSNENcHGyXQD8PFYyPo+wrfMImPCSXwUqnXCHNZcC4AL0QV5juj7C+nUMvYXrF3VQb62ANDaBamgiAL8NxQQRArn1lk3YSCLJj9dfM1NQqkhyT3BV1z4BUqvEgbAizOQ3q4fnRQASFknjg07yzv0bN0VUq7KUqPfePHXmPFXbim6bRGKjPdr1wyY66lcqVYUd+ZYp0PIU0YpWFM1pc+DkBfPdXsDOeGrKU7AZxOk.wBMbtYkfpTzwvoidHABCVSWaKROlOMIlMgBNkQNUlDFPjQLEjWBQAqFhgBIR.USMqD0qWuPpo8p5JVLScBqVoiHS7+9IibThqs0V2pPCE+WeopFGBJMtEgS9BxbjGX3pWcqBIKEqNCPEkDO7EQTIFtstFGPUtVdl8+dV0JOyle7xSipGa1xlmrCMLrGXiZyHG5rS2JgsEJeaWIQH0C4hADd+x4clLNBTNxFEoG6XGxrlQHIjIF.4DeIDvKEJULchRjmUNWqQ54py3wlrNlfBcrBxM46W380KR7dol5PSRdZHzjRXslC3l95t1L8fXGWAdqMsF3HWb+gTw.XCtHf8TCXGKSH9gbPR.oTRrUSYY1OpMQpxkMSYfqnAsmV4jpCHsF5WCDIQlLbc8bwZazEDw8owLSMjs7qGDt.6P6ISzthHFziJvxTtjwRC+9CY.5.yvsGbTQpgC41JXd7mmGSs4AYmbeU9A2j8Jtiw9ld5FEZLsqWA7uTMXuO3DlwENgKShCGOgj9xHNKXhB77jPSFt6Lb5bozJmm4NHmWMyD8smcQyzUBYUMkJWtuTydfn1VU9kJqVApVews52el6kpvPlZlaaFrPMOAqIRF0ioxJHyXDtscxqyWawtN22EiJwnTzVv0OHhktt3BeydNuNa2FnbmsLoBerLUqqMC1JHM87DnzyPXxBuT1AOUamq3JoyUTbZg3.NqhKc7grQIjG1yCTl4BDj2aiadcHAq9C291ve+lcqW+aUcPnG0dWy1oFBrIfC3RHM2DM81ExV8YtAZVEuKK9XsLBPcdhEx60OGv5o4CO156aMNewe0oUTl22NvLB6sUQrAC3T3jEN1x0PaSuE2Yxo7.8vhYQG2BUBSXGltTJlb8Bs34MwEMGKAGTY3f3shomvZK5X62XFOqrxWSmN9oS46GJoZn+7gbHMyXhKiKSprSiduRV4WEsRi3tv6kwNyssRdJbONp2frIqW80.1+WKvzrQET+ym+6OeRpW2P9u+qmaIaOW89CrsG0llT8tfWkdu4mSzpD10x2xltqx2rOMLtztlj83oIaJ8bhDOsBomHU.xLehvjRByS.nMYjUna.csdgyxneq0PFevvhu.okrEZ54+qVNKI8SelHuYhw9WddeIRyE+KQJUZtQdo4xmY91kvNTjRJstr36sPKfNphenMwXBUf8lq3tZlz7QyDbZVTJsbErxBpf0vFosX3b3.kTv5VEz8X9TPvaACAfFjJ8cYiO+AxIcjHFK3tBYuBHr1rDd8Tggx9dxskO0JNzhi8yIL3KlyIuXNRIHTE+.eMTF9PyvRm+yxUwcGlzueHadAf4eQAz2hMheHzLqzFSoM2cFuKt4MqO6emC6cDCFbgqG+xs2YbG0BZoqfumc9rE1u5erwNGcGvNOV1wsdAyE1.uCLuqfE1kEx7MMflepvLUx6fePhNJQ+JPUafOnydPyMUlxJTxRKrRtrQI6IBlREqaeFnodhi0wGHCRBMcaK+5KlmYJcCXFtIZCadJCQLjKT9YnNGOISiY9jLMmUe5EDtaf6v09CmMdWZF307ZO+Oi27K31qeeHin.rqf2+wuZeMqYBkGBe5DL9xATshCSuXu+.lt.564RLhyRqRW2HqEVWlHvt34vuzMalkHa1rY1lnQTek7I9tzRySn8FVJ.lD1WObU7Al0jhYYwMp2.MhGvehuuIT7g.1msLW+BHyMt.x7wW.Y9jKfL27BHymdAj4ylqLlGU81IZ4HWYBPnydtYL81y8BD1Ik+OjXiR0K
                    
                    1 Reply Last reply Reply Quote 2
                    • L
                      LeeC
                      last edited by

                      Wow, thanks both for 2 great working solutions to the problem.

                      Pure gold!!

                      Hope you're both good ☺

                      LindonL 1 Reply Last reply Reply Quote 0
                      • LindonL
                        Lindon @LeeC
                        last edited by

                        @LeeC

                        or theres this(a combo box listing arp presets, and an arp setting save button):

                        inline function onSaveSettingsControl(component, value)
                        {
                        	//save a setting
                        	local arpsetDX = ArpSettings.getValue() - 1;
                        	//Console.print("index is:" + arpindx);
                            ArpSettingsArray[arpsetDX] = Arpeggiator1.exportState();
                            //Console.print("arp settings are:" + ArpSettingsArray[arpsetDX]);
                            ArpSettingsArrayPanel.setValue(ArpSettingsArray);
                        	ArpSettingsArray = ArpSettingsArrayPanel.getValue();
                            //Console.print("retriving:" + ArpSettingsArray[arpsetDX]);
                            component.setValue(0);
                        };
                        
                        Content.getComponent("SaveSettings").setControlCallback(onSaveSettingsControl);
                        
                        
                        inline function onArpSettingsControl(component, value)
                        {
                        	//load an arp setting
                        	//Console.print(ArpSettingsArrayPanel.getValue());
                        	local arpLoadDx;
                        	arpLoadDx = value -1;
                        	ArpSettingsArray = ArpSettingsArrayPanel.getValue();
                        	
                            //Console.print("returned value is:" + ArpSettingsArray[arpLoadDx]);
                            Arpeggiator1.restoreState(ArpSettingsArray[arpLoadDx]);
                            //Console.print("num steps:..........." + Arpeggiator1.getAttribute(Arpeggiator1.NumStepSlider));
                            ArpSteps.setValue(Arpeggiator1.getAttribute(Arpeggiator1.NumStepSlider));
                            ArpTempo.setValue(Arpeggiator1.getAttribute(Arpeggiator1.SpeedKnob));
                            ArpSwing.setValue(Arpeggiator1.getAttribute(Arpeggiator1.Shuffle));
                            ArpDirection.setValue(Arpeggiator1.getAttribute(Arpeggiator1.SequenceComboBox));
                            ArpOctave.setValue(Arpeggiator1.getAttribute(Arpeggiator1.OctaveRange));
                            ArpSteps.setValue(Arpeggiator1.getAttribute(Arpeggiator1.StepSkipSlider));
                            ArpSteps.setValue(Arpeggiator1.getAttribute(Arpeggiator1.NumStepSlider));
                            // start it in the off state
                            Arpeggiator1.setAttribute(Arpeggiator1.BypassButton, true);
                            Content.getComponent("ArpBypass").setValue(false);
                        };
                        
                        Content.getComponent("ArpSettings").setControlCallback(onArpSettingsControl);
                        

                        HISE Development for hire.
                        www.channelrobot.com

                        L DanHD 2 Replies Last reply Reply Quote 1
                        • L
                          LeeC @Lindon
                          last edited by LeeC

                          @Lindon This looks interesting ☺
                          Would actually make a lot of sense to include the option to 'save' an arpeggiator sequence.

                          Will take a look when I get back to the machine.

                          Big thanks for this!

                          1 Reply Last reply Reply Quote 0
                          • DanHD
                            DanH @Lindon
                            last edited by

                            @Lindon Reviving this old thread. Is combobox still the way forward for Arp / Sliderpack presets?

                            DHPlugins / DC Breaks | Artist / Producer / DJ / Developer
                            https://dhplugins.com/ | https://dcbreaks.com/
                            London, UK

                            1 Reply Last reply Reply Quote 0
                            • First post
                              Last post

                            26

                            Online

                            1.8k

                            Users

                            12.0k

                            Topics

                            104.2k

                            Posts