It is currently April 19th, 2024, 3:31 pm

Stacked Loops + Combining .gifs: Think Tank

Get help with creating, editing & fixing problems with skins
User avatar
Vx_Lotus
Posts: 34
Joined: July 30th, 2019, 7:37 am

Stacked Loops + Combining .gifs: Think Tank

Post by Vx_Lotus »

Hello again,
I like the community, so helpful, I don't like to keep asking for help as I feel its important to learn as much as you can on your own before someone spills the guts. However; I am a fan of people working together to solve major issues and help each other out. I'm afraid I must ask for help once more.
I was wondering How to attach (skin 1 = 2 frames, 2 sequence files with 2 separate operations) to 4 different sequences of similar aspects... Then there is the matter of optional clicking formats... I am using 4 live feed files per sequence, each sequence has a built in frame. A hidden sequence is a door that could be used to cover each live feed.... but if deactivated, will stay hidden until the reverse effect is applied. So there are 2.ini for the door, and 1.ini for each live feed. And each live feed is attached to individual outside buttons.
https://docs.rainmeter.net/manual-beta/meters/general-options/container/
https://forum.rainmeter.net/viewtopic.php?f=123&t=30121#p155025
https://docs.rainmeter.net/tips/advanced-rmskin-options/
https://docs.rainmeter.net/manual/mouse-actions/
https://docs.rainmeter.net/manual/arranging-skins/

RMSKIN LINK: https://www.dropbox.com/s/9g2p75z1gfdmawx/RedQueen_1.8.7.2019.rmskin?dl=0


RMSKIN NOTE:
~It is saved as a layout- instead of skin~
(I'm not sure as to the function of this weather it really makes a difference or not...)
~I simply thought it would be more useful to the questions below as this is how its setup on my pc.~
If it isn't fully organized Im sorry im trying to find a fix.
If the files are too large or is slowing the CPU down, Im sorry for that 2... I looking for a fix to this as well. Hence these questions below
~Please be mindful, this is a work in progress so some things will not work as they are supposed to and there are a lot of files listed inside that have yet to be used in a .ini file or function
(if you find another use for them, please help yourself to anything you find useful. I will not discriminate)
Is there a better way to go about this to shrink file size?
Can a single click LeftMouseUpAction=[4 things]--Work in the same skin for multiple functions?

Example: working during different events

Code: Select all

LeftMouseUpAction=
[Loop]
LeftMouseUpAction=
[ImageMeter]
LeftMouseUpAction=
[Loop2]
LeftMouseUpAction=
[ImageMeter2]
What would be the best way to code this/pack this to share?
https://forum.rainmeter.net/viewtopic.php?t=30329 Ive read all links and still question best procedure as there are similarities between this and that.. If there are files missing for this to work, please let me know and I will make sure they are added here. Or if files not needed, I'll be happy to remove them from the attachment list.
You do not have the required permissions to view the files attached to this post.
User avatar
eclectic-tech
Rainmeter Sage
Posts: 5395
Joined: April 12th, 2012, 9:40 pm
Location: Cedar Point, Ohio, USA

Re: Stacked Loops + Combining .gifs: Think Tank

Post by eclectic-tech »

Vx_Lotus wrote: August 7th, 2019, 11:22 pm Hello again,
I like the community, so helpful, I don't like to keep asking for help as I feel its important to learn as much as you can on your own before someone spills the guts. However; I am a fan of people working together to solve major issues and help each other out. I'm afraid I must ask for help once more.
Asking for help is not a problem, but you do need to be very precise on what you want to happen, and supply details on every step along with testable code. You are very familair with your skins, but someone trying to help you knows absolutely nothing, so keeping it simple and precise will help you to get meaningful answers.
Vx_Lotus wrote: August 7th, 2019, 11:22 pmI was wondering How to attach (skin 1 = 2 frames, 2 sequence files with 2 separate operations) to 4 different sequences of similar aspects...
This is too vague for anyone to understand what you are asking.
Attach what?
What skin?
What are "sequence files"?
What do you mean by "similar aspects"? :confused:
Vx_Lotus wrote: August 7th, 2019, 11:22 pmThen there is the matter of optional clicking formats... I am using 4 live feed files per sequence, each sequence has a built in frame. A hidden sequence is a door that could be used to cover each live feed.... but if deactivated, will stay hidden until the reverse effect is applied. So there are 2.ini for the door, and 1.ini for each live feed. And each live feed is attached to individual outside buttons.
Again, you need to be very specific. A package that contains the images and code might help, but I have no idea what you are asking in regard to 'clicking formats' and these vague skin references...
What is the purpose of links to the manual?
Vx_Lotus wrote: August 7th, 2019, 11:22 pm
RMSKIN LINK: https://www.dropbox.com/s/9g2p75z1gfdmawx/RedQueen_1.8.7.2019.rmskin?dl=0


RMSKIN NOTE:
~It is saved as a layout- instead of skin~
(I'm not sure as to the function of this weather it really makes a difference or not...)
~I simply thought it would be more useful to the questions below as this is how its setup on my pc.~
If it isn't fully organized Im sorry im trying to find a fix.
If the files are too large or is slowing the CPU down, Im sorry for that 2... I looking for a fix to this as well. Hence these questions below
~Please be mindful, this is a work in progress so some things will not work as they are supposed to and there are a lot of files listed inside that have yet to be used in a .ini file or function
(if you find another use for them, please help yourself to anything you find useful. I will not discriminate)
https://forum.rainmeter.net/viewtopic.php?t=30329 Ive read all links and still question best procedure as there are similarities between this and that.. If there are files missing for this to work, please let me know and I will make sure they are added here. Or if files not needed, I'll be happy to remove them from the attachment list.
I do not think very many people will be interested in downloading a 500+MB package in order to try to help. The only option for such a graphic suite might be to break the skins into "Patches" rmskins, that can be smaller size and merged with existing packages; but that is a fairly advanced method (part 3) to understand.
Vx_Lotus wrote: August 7th, 2019, 11:22 pmExample: working during different events

Code: Select all

LeftMouseUpAction=
[Loop]
LeftMouseUpAction=
[ImageMeter]
LeftMouseUpAction=
[Loop2]
LeftMouseUpAction=
[ImageMeter2]
The action bangs can preform multiple actions, but thay are completely unrelated to action bangs in another section.
Again, I am not sure what you are asking because the code you posted can not be loaded and tested by anyone.

CONCLUSION
Many forum members would be willing to help, but you need to break down your questions into code that can be tested, and I would suggest asking about one specific problem, get that solved, and then ask about the next.

I understand the excitement of creating your own project and your understanding of how everything works together, but in order to help you, we need you to take us in "Baby Steps", otherwise we get lost.

Regards
User avatar
Vx_Lotus
Posts: 34
Joined: July 30th, 2019, 7:37 am

Re: Stacked Loops + Combining .gifs: Think Tank

Post by Vx_Lotus »

=D okay this helps a lot.
I made a door - one that opens, one that closes. each have 1 .ini file
I want to be able to attach these to 6 skins and work independently.

Group 1. Gif and Frame (movie) ~it plays only when activated and doesn't go away until the doors close {works}

Group 2. (Door) -works
1. click to open
1.a) reveal the "named loop" when open
2. click to close
2.a) close the "Named Loop" when closed \ stop all sound.

Group 3. (reveal door and play loop and highlight {Works} text red and stay red until 3a) {does not work \ no code yet}
3. show "red text when loop is opened."
3.a) Return "text to normal when closed."

{does not work}
Like a frame attached to a .gif (a loop frame attached to a loop) ~ that functions when a "Text.ini" is clicked and then deactivates when clicked again.

It seems like i'm having difficulty explaining how this is supposed to function...

But the moving (frame) "Door" needs to be attached to 6 Cameras \ .gifs \ loops.. that work (Work separately from eachother)
IE: The curtain that unveils during a play. Then when the play is over, the curtain closes. (only in this case - click to open, click to close)
IE: 1 curtain for 6 plays. Each play can be watched at the same time or separate times and be closed at different times.
IE: Instead of 6 plays and 6 curtains.

I listed my .ini files because i'm unsure of how to code them or even if I need more or use the other ones I have.
I posted the links to the manual, because it describes some of the issues i'm having.

If anyone has an example of something like this. Id like to test it.
https://tenor.com/Y50H.gif

As I need it attached to 6
I will just list code from 1 that does work.. {good} but it separates when another loads.{Bad} (Picture above)

;********************************Button that activates the second skin***************************

Code: Select all

[Rainmeter]
Update=-1
AccurateText=1
DynamicWindowSize=1
onrefreshaction=!Zpos 0
SnapEdges=0

[MeasureOnLoad]
Measure=Calc
Formula=Counter
IfCondition=MeasureOnLoad = 1
IfAboveAction=Play "#@#Sounds\Door.wav"
UpdateDivider=-1

[Metadata]
Name=RedQueen
Author=Lotus
Information=Suite of skins inspired by BluVision by g3xter
License=Creative Commons V3.0 BY-NC-SA
Version=2.2019.8.6


[Variables]
FontColorPassive=0,255,255,255
FontColorActive=255,0,0,255

[String1]
Meter=String
StringStyle=BOLD
FontFace=Resident Evil
FontSize=16
Text=RED QUEEN
;ACTIVE
FontColor="0,255,255,255"
AntiAlias=1
dynamicvariables=1

MouseOverAction=[!SetOption String1 FontColor "0,255,255,255"][!UpdateMeter String1][!Redraw]
MouseLeaveAction=[!SetOption String1 FontColor "255,255,255,255"][!UpdateMeter String1][!Redraw]
LeftMouseDownAction=[!SetOption String1 FontColor "255,0,0,255"][!ToggleConfig "TheRedQueen\Minion" "RedQueen.ini"][!ToggleConfig "TheRedQueen\RedQueenSystem" "DoorOpen.ini"][!UpdateMeter String1][!Redraw]
;LeftMouseUpAction=[!ToggleConfig "RedQueen\Minion" "RedQueen"]

IfAboveAction=[FontColor=String1]
FontColor="255,0,0,255"


UpdateDivider=-1



;**************************************Plays when doors open***************************.gif 1

Code: Select all

[MeasureOnLoad]
Measure=Calc
Formula=Counter
IfCondition=MeasureOnLoad = 1
IfAboveAction=[Play "#@#Sounds\Door.wav"]
UpdateDivider=-1
;***********************************************************************
;MouseOverAction=;[!EnableMeasure MeasureAnimation]

;[MaskImageName]

;Door
;***********************************************************************
[ImageMeter2]
Meter=Image
x=10
y=10
W=210
H=110
ImageName=#@#Images\Door.png
;***********************************************************************
LeftMouseUpAction=[!PlayStop][!HideMeter ImageMeter2][!ActivateConfig "TheRedQueen\RedQueenSystem" "DoorOpen.ini"][!ShowMeter ImageMeter][!Delay=500][Play "#@#Sounds\Thereyouare.wav"]
[ImageNumberCalc]
Measure=Calc
Formula=(Counter % 39) + 1
String=Text
x=50
y=50
IfCondition=(ImageNumberCalc = 39)
IfTrueAction=!ActivateConfig "TheRedQueen\Minion"

[ImageNumberLoop]
Measure=Loop
StartValue=1
EndValue=68
LoopCount=1
IfCondition=(ImageNumberLoop=68)

[ImageNumberCalc]
Measure=Calc
Formula=(ImageNumberCalc % 39) + 1

[ImageMeter] 
Meter=Image
ImageName=#@#RedQueen\REDQUEEN - ([ImageNumberCalc]).png
x=10
y=10
W=205
H=105
AntiAlias=1
DynamicVariables=1
Hidden=1
;**********************************************************************
[Frame]
Meter=Image
ImageName="#@#Background\BlueFrame5.png"
W=225
H=125
UpdateDivider=-1

[Meter]
Meter=String
FontColor=255, 255, 255
FontFace=Sogoe UI
FontSize=9
StringAlign=CENTER
StringStyle=BOLD
Text=LIVE FEED
X=50
Y=10
AntiAlias=1
UpdateDivider=-1

[Meter2]
Meter=String
FontColor=255, 0, 0
FontFace=Sogoe UI
FontSize=9
StringAlign=CENTER
StringStyle=BOLD
Text=RED QUEEN
X=173
Y=10
AntiAlias=1
UpdateDivider=-1

;******************************************When door closes, close the image loop***********************


This + door open + door 2 works but they are not connected as in. In 1 piece... So when another loop from another plays it acts on its own and is no longer connected. {bad} The idea was to use the door to hide in 6 different looped.ini
The {Code above} - there are six others that basically do the same thing. but the doors still aren't attached (Bad)
{Balala} stated in another post that its better to keep these kinds of .ini's separate. So how would I get each {main loops + doors} to act as a single file instead of 8-10 files? haha I know this isn't exactly baby steps, I just wasn't sure where to begin.. I have the plays, the curtain, but 2 many .ini files and too many lines of code.
You do not have the required permissions to view the files attached to this post.
User avatar
eclectic-tech
Rainmeter Sage
Posts: 5395
Joined: April 12th, 2012, 9:40 pm
Location: Cedar Point, Ohio, USA

Re: Stacked Loops + Combining .gifs: Think Tank

Post by eclectic-tech »

Having separate skins to open/close doors is not going to work.
You will want to integrate the code to open/close doors into each of your feed skins.

I am introducing you to the ActionTimer Plugin to animate the doors. It is the best method to use for animations; better and more versatile than the modulo (ImageCalc) method you have been using. I did leave the modulo method for your queen image animation because it is a simple counter.

Let's start with integrating the door animation into the "RedQueen.ini" (LiveFeed1).
I am combining your DoorOpen.ini/DoorClose.ini/and integrating them into "RedQueen.ini".

Here is a new "RedQueen1.ini" that combines open/closing and showing the feed. I made a lot of changes to section names (to identify what each does) and coded the door actions to use ActionTimer Plugin.

Save this. Load it. See if it does what you want. Then look at the code and ask any questions.

RedQueen1.ini

Code: Select all

[Metadata]
Name=TheRedQueen
Author=Lotus
Information="TheRedQueen"| 535MB | Do NOT change the SpeedOfLight variable.
Version=1.1905
License=Creative Commons Attribution-Non-Commercial-Share Alike 3.0
***********************************************************************

[Rainmeter]
Update=100
OnCloseAction=[PlayStop]
MiddleMouseUpAction=[PlayStop]

[Variables]
DoorPosition=1

;**************************************************************************
[MeasureActionTimerDoors]
Measure=Plugin
Plugin=ActionTimer
DynamicVariables=1

ActionList1=ClickClosedDoorsAction | Repeat DoorsOpen,250,10 | OpenFinishAction

ClickClosedDoorsAction=[Play "#@#Sounds\Door.wav"][!UnPauseMeasure QueenImageNumberCalc]

DoorsOpen=[!SetVariable DoorPosition (Clamp(#DoorPosition#+1,1,10))][!UpdateMeasure #CurrentSection#][!UpdateMeter *][!Redraw]

OpenFinishAction=[Play "#@#Sounds\Thereyouare.wav"][!HideMeter DoorImageMeter][!Redraw]

ActionList2=ClickOpenedDoorsAction | Repeat DoorsClose,250,10 | CloseFinishAction

ClickOpenedDoorsAction=[!ShowMeter DoorImageMeter][!Redraw][Play "#@#Sounds\Door.wav"]

DoorsClose=[!SetVariable DoorPosition (Clamp(#DoorPosition#-1,1,10))][!UpdateMeasure #CurrentSection#][!UpdateMeter *][!Redraw]

CloseFinishAction=[!PauseMeasure QueenImageNumberCalc]

; Documentation: https://docs.rainmeter.net/manual-beta/plugins/actiontimer/

;**************************************************************************

[QueenImageNumberCalc]
Measure=Calc
Formula=(QueenImageNumberCalc % 39) + 1
Paused=1

[QueenImageMeter] 
Meter=Image
ImageName=#@#RedQueen\REDQUEEN - ([QueenImageNumberCalc]).png
x=10
y=10
W=205
H=105
AntiAlias=1
DynamicVariables=1
LeftMouseUpAction=[!CommandMeasure MeasureActionTimerDoors "Stop 1"][!CommandMeasure MeasureActionTimerDoors "Stop 2"][!CommandMeasure MeasureActionTimerDoors "Execute 2"]

;**********************************************************************
[MeterLiveFeed]
Meter=String
FontColor=255, 255, 255
FontFace=Sogoe UI
FontSize=9
StringAlign=CENTER
StringStyle=BOLD
Text=LIVE FEED
X=50
Y=10
AntiAlias=1
UpdateDivider=-1

[MeterRedQueen]
Meter=String
FontColor=255, 0, 0
FontFace=Sogoe UI
FontSize=9
StringAlign=CENTER
StringStyle=BOLD
Text=RED QUEEN
X=173
Y=10
AntiAlias=1
UpdateDivider=-1

;**********************************************************************
[DoorImageMeter] 
Meter=Image
ImageName=#@#Background\HeavySliderOpen\Open (#DoorPosition#).png
W=225
H=125
AntiAlias=1
DynamicVariables=1
LeftMouseUpAction=[!CommandMeasure MeasureActionTimerDoors "Stop 1"][!CommandMeasure MeasureActionTimerDoors "Stop 2"][!CommandMeasure MeasureActionTimerDoors "Execute 1"]

[Frame]
Meter=Image
ImageName="#@#Background\BlueFrame2.png"
W=225
H=125
UpdateDivider=-1

User avatar
Vx_Lotus
Posts: 34
Joined: July 30th, 2019, 7:37 am

Re: Stacked Loops + Combining .gifs: Think Tank

Post by Vx_Lotus »

Amazing..... Truly. Mind officially blown. The action timer... Can have any name associated with it? Assuming it is like C# here.
[MeasureActionTimerDoors] ~ TimerDoors

Code: Select all

|Repeat DoorsClose,250,10|
How does this work?

Code: Select all

(Clamp(#doorposition#1,1,10))
Literally clamps a skin to the position specified?
[!CommandMeasure is calling on actiontimerList# to function but then you used "Stop 2" Execute 1, Execute 2.] ~Unclear to me.
"A few other forum posts say not to use !Execute more than once, though I don't understand why." Is this the same thing or something else?

Code: Select all

[!CommandMeasure MeasureActionTimerDoors "Stop 1"]
Don't fully grasp !CommandMeasure. What does it do in layman's terms?
I do the same for my other skins by adding this action timer? - This made our code look so messy by comparison. :oops: \My Code
Wouldn't want to proceed till I understand this. 8-)
Last edited by Vx_Lotus on August 14th, 2019, 2:22 am, edited 1 time in total.
User avatar
Vx_Lotus
Posts: 34
Joined: July 30th, 2019, 7:37 am

Re: Stacked Loops + Combining .gifs: Think Tank

Post by Vx_Lotus »

But there isn't a Container" here is there?
Container=MeterContainer isn't here. I'm so comfused. :D
User avatar
eclectic-tech
Rainmeter Sage
Posts: 5395
Joined: April 12th, 2012, 9:40 pm
Location: Cedar Point, Ohio, USA

Re: Stacked Loops + Combining .gifs: Think Tank

Post by eclectic-tech »

Vx_Lotus wrote: August 14th, 2019, 1:58 am The action timer... Can have any name associated with it? Assuming it is like C# here.
[MeasureActionTimerDoors] ~ TimerDoors
Yes, just like any section name in a skin, it can be any name you want but each section name MUST BE UNIQUE (no duplicate names). So I could call it [DoorSlam] and it would still perform the same; the key to this is the #CURRENTSECTION# variable in the bang [!UpdateMeasure #CurrentSection#]; This is why the section name can be anything you want.
Vx_Lotus wrote: August 14th, 2019, 1:58 am

Code: Select all

|Repeat DoorsClose,250,10|
How does this work?
You need to refer to the ActionTimer manual page, this tells the timer to repeat the 'DoorClose' bangs, wait 250 milliseconds, then repeat the 'DoorClose' bang 10 times. If you look at the 'DoorClose' bang you will see it subtracts 1 from the #DoorPosition# variable each time it is called; since you have 10 door images, when it also updates, you see the door image change to the next image# until the image shows the doors closed.
Vx_Lotus wrote: August 14th, 2019, 1:58 am

Code: Select all

(Clamp(#doorposition#1,1,10))
Literally clamps a skin to the position specified?
You missed the + or - in that formula (Clamp(#doorposition#+1,1,10)); this formula is a way to make sure the calculated value '#doorposition#+1' does not go lower then '1' or higher than '10', the last 2 numbers in the Clamp formula. See more here
Vx_Lotus wrote: August 14th, 2019, 1:58 am

Code: Select all

[!CommandMeasure MeasureActionTimerDoors "Stop 1"]
Don't fully grasp !CommandMeasure. What does it do in layman's terms?
This is how you control the ActionTimer measure. The measure will not do anything until you tell it to execute an action list; it is also good practice to make sure no action lists are currently running (if they are, your command will be ignored), so you send !CommandMeasure's to stop each possible action list (in this case 'Stop 1' and 'Stop 2'), then tell the measure to execute the action list you want; [!CommandMeasure MeasureActionTimerDoors "Execute 1"] will open the doors, play the sound wav, etc.
Vx_Lotus wrote: August 14th, 2019, 1:58 amI do the same for my other skins by adding this action timer? - This made our code look so messy by comparison. \My Code
Well it should be very similar. I would think you can use the same ActionTimer section, but some of the 'ActionList' items will have to be changed to reference the meters and wav sounds in the other skins.

Try editing one of the other feeds and if you run into issues post what you tried here and we can look at solutions.
User avatar
Vx_Lotus
Posts: 34
Joined: July 30th, 2019, 7:37 am

Re: Stacked Loops + Combining .gifs: Think Tank

Post by Vx_Lotus »

*MInd Still blown*… there isn't a container* Or is this an advanced version of one?
I'm very happy this works but i'm still very confused about the clamp.
(Clamp(#DoorPosition#-1,1,10)) or #+1
*There isn't an x/y* (it only counts images right?)X low,X high.
Example:

Code: Select all

ChangeSizeCalc=[!SetVariable Size "(Clamp(#Size#-5,8,60))"]#U#
but in the example's case its a Size thing..."Vague"
(how does it (Doors) know where to be positioned)?:confused:
Is it just the [DoorImageMeter]? still no x/y. Plus there isn't a [DoorImageMeterClose] so how does it reverse; the " -1 " in the [#DoorPosition#]?
The position of the [MeasureActionTimer] is mandated? Meaning it has to be near the top of the [Variable] code to work?
Maybe this is over my head. Was there alot of testing involved with the "Actiontimer and "Clamp commands? You make it look effortless.
Lastly: If I understand this
We're constantly updating the measures to show an image 1-10.
This is redrawn 1 time until it reaches the (#DoorPosition# -1,1,10)).
The Repeater in this case is how fast it displays each image and then an action is completed right?

"ActionTimer does not support, and should not be used, to do anything "endless" or otherwise of a very long duration combined with a very rapid update. If the Rainmeter message queue becomes overwhelmed, the skin can get laggy and unresponsive to mouse actions you might take." Will this be an issue if Redqueen.ini is ran for extended periods of time? or is it only if the doors keep opening / closing?) She updates every 100/300 which I could change to 1000 but it wont look right.
User avatar
eclectic-tech
Rainmeter Sage
Posts: 5395
Joined: April 12th, 2012, 9:40 pm
Location: Cedar Point, Ohio, USA

Re: Stacked Loops + Combining .gifs: Think Tank

Post by eclectic-tech »

Vx_Lotus wrote: August 14th, 2019, 3:23 am Lastly: If I understand this
We're constantly updating the measures to show an image 1-10.
This is redrawn 1 time until it reaches the (#DoorPosition# -1,1,10)).
The Repeater in this case is how fast it displays each image and then an action is completed right?
Yes, you got it exactly right! :thumbup:
Vx_Lotus wrote: August 14th, 2019, 3:23 am"ActionTimer does not support, and should not be used, to do anything "endless" or otherwise of a very long duration combined with a very rapid update. If the Rainmeter message queue becomes overwhelmed, the skin can get laggy and unresponsive to mouse actions you might take." Will this be an issue if Redqueen.ini is ran for extended periods of time? or is it only if the doors keep opening / closing?) She updates every 100/300 which I could change to 1000 but it wont look right.
You have a constant animation of the "RedQueen" image (39 frames) at the skin update rate of 100~300... this alone is not going to greatly affect CPU load, but multiple similar continuous animation, could cause other PC operations to lag.

The ActionTimer runs completely independent of the skin update rate. It will try to run as fast as possible which is one of it's main advantages, but this does cause a momentary increase in CPU load. That is why it is not recommended for continuous animation.

So basically, ActionTimer is the best choice for momentary animations; it offers more control and the ability to perform multiple function at the fastest possible speed, without the need to have the entire skin at a very fast update rate.
For simple continuous animations (which I would try to keep at a minimum!) a Modulo counter measure will work but require a fast update rate for the skin.